您当前的位置: 首页 >  tensorflow

寒冰屋

暂无认证

  • 1浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

TensorFlow简介:向量对象

寒冰屋 发布时间:2019-01-22 20:53:53 ,浏览量:1

目录

介绍

背景

向量作为数字列表

使用NumPy库

使用TensorFlow

使用代码

总结

介绍

在机器学习中,向量可以用作表示数字数据的好方法。使用向量时,我们可以满足以下基本操作:

  • 添加两个向量
  • 减去两个向量
  • 多个带有标量的向量(即数字)
  • 规范(即向量的大小或长度)
  • 两个向量的点积

在本文中,我将通过三种方法介绍向量对象的基本操作:

  • 最简单的方法是将向量表示为Python中的数字列表
  • 第二种方法是在Python中使用Numpy库
  • 最后一种方法是使用TensorFlow
背景 向量作为数字列表

在这种方法中,我们将向量表示为Python中的数字列表。例如,我们可以创建两个向量(v和w)作为两个数字列表:

v = [1,2]

w = [2,3]

可以将两个向量加在一起以形成新的向量。添加v和w的结果:

v + w =​​ [3,5]

在Python中,我们可以使用zip方法添加两个向量:

def vector_add(v, w):
       """adds corresponding elements"""

       return [v_i + w_i
              for v_i, w_i in zip(v, w)]

同样,可以将两个向量相减,形成一个新向量:

v - w = [-1,-1]

在Python中:

def vector_subtract(v, w):
      """subtracts corresponding elements"""

      return [v_i - w_i
             for v_i, w_i in zip(v, w)]

向量也可以与标量相乘以形成新的向量,例如:

3 * v = [3,6]

在Python中:

def scalar_multiply(c, v):
       """c is a number, v is a vector"""

       return [c * v_i for v_i in v]

两个向量的点积是它们的分量产物的总和。v和w的点积:

vw = 1 * 2 + 2 * 3 = 8

在Python中:

def dot(v, w):
       """v_1 * w_1 + ... + v_n * w_n"""

       return sum(v_i * w_i
              for v_i, w_i in zip(v, w))

使用上面的dot函数,我们可以用它来计算向量的大小(或长度)。大小也称为向量的范数。以下函数(名为norm)计算向量的范数:

import math

def norm(v):
       return math.sqrt(dot(v,v))
使用NumPy库

另一种方法是使用NumPy库,其中包含许多支持向量基本操作的函数。如果我们将向量创建为数字列表,但我们必须将它们转换为数组,因为NumPy的函数仅适用于数组对象。

在使用NumPy库之前,我们必须:

import numpy as np

类似的功能vector_add,vector_subtract,scalar_multiply,dot和norm可以重新写成如下代码:

def vector_add(v, w):
       """adds corresponding elements"""

       return np.array(v) + np.array(w)

def vector_subtract(v, w):
       """subtracts corresponding elements"""

       return np.array(v) - np.array(w)

def scalar_multiply(c, v):
       """c is a number, v is a vector"""

       return c*np.array(v)

def dot(v, w):
       """v_1 * w_1 + ... + v_n * w_n"""

       return np.dot(np.array(v),np.array(w))

def norm(v):
       return np.linalg.norm(np.array(v))
使用TensorFlow

TensorFlow是一个开源库,由Google Brain团队开发,并于2015年11月发布。在使用TensorFlow之前,我们需要了解以下基本概念:

  • 图表:学习过程的布局,不包括数据
  • 数据:用于训练的示例,它有两种输入和目标
  • 会话:我们向图表提供数据或会话=图表+数据。我们可以通过使用占位符来实现这一点——在介绍示例的地方使用门(gates)。

可以使用TensorFlow库中的函数实现对向量的操作:

# creating the Graph

vec_1 = tf.placeholder(tf.float32)

vec_2 = tf.placeholder(tf.float32)

scalar = tf.placeholder(tf.float32)

vector_add = tf.add(vec_1,vec_2)

vector_subtract = tf.subtract(vec_1,vec_2)

scalar_multiply = tf.multiply(scalar,vec_1)

norm = tf.norm(vec_1)

dot = tf.tensordot(vec_1, vec_2, 1)

我们可以通过会话向图表提供数据:

#############DATA

v = [1,2]

w = [2,3]

c = 3

##########SESSION

with tf.Session() as sess:

       result_add = sess.run(vector_add, feed_dict={vec_1:v,vec_2:w})

       result_sub = sess.run(vector_subtract, feed_dict={vec_1:v,vec_2:w})

       result_mul = sess.run(scalar_multiply, feed_dict={scalar:c,vec_1:v})

       result_norm = sess.run(norm , feed_dict={vec_1:v})

       result_dot = sess.run(dot, feed_dict={vec_1:v,vec_2:w})
使用代码

要测试第一种方法,我们可以创建一个名为vectors_lists.py的文件:

import math

#########VECTORS AS LISTS##########

def vector_add(v, w):

       """adds corresponding elements"""

       return [v_i + w_i

              for v_i, w_i in zip(v, w)]

def vector_subtract(v, w):

       """subtracts corresponding elements"""

       return [v_i - w_i

              for v_i, w_i in zip(v, w)]

def scalar_multiply(c, v):

       """c is a number, v is a vector"""

       return [c * v_i for v_i in v]

def dot(v, w):

       """v_1 * w_1 + ... + v_n * w_n"""

       return sum(v_i * w_i

              for v_i, w_i in zip(v, w))

def norm(v):

       return math.sqrt(dot(v,v))

##########DATA#############

v = [1,2]

w = [2,3]

scalar = 3

#########OUTPUT##########

print(vector_add(v,w))

print(vector_subtract(v,w))

print(scalar_multiply(scalar,v))

print(norm(v))

print(dot(v,w))

如果运行此文件,结果可能如下所示:

[3, 5]

[-1, -1]

[3, 6]

2.23606797749979

8

要测试第二种方法,我们可以创建一个名为vectors_numpy.py的文件:

import numpy as np

#########VECTORS AND NUMPY##########

def vector_add(v, w):

       """adds corresponding elements"""

       return np.array(v) + np.array(w)

def vector_subtract(v, w):

       """subtracts corresponding elements"""

       return np.array(v) - np.array(w)

def scalar_multiply(c, v):

       """c is a number, v is a vector"""

       return c*np.array(v)

def dot(v, w):

       """v_1 * w_1 + ... + v_n * w_n"""

       return np.dot(np.array(v),np.array(w))

def norm(v):

       return np.linalg.norm(np.array(v))

##########DATA#############

v = [1,2]

w = [2,3]

scalar = 3

#########DISPLAY VECTORS ##########

print(vector_add(v,w).tolist())

print(vector_subtract(v,w).tolist())

print(scalar_multiply(scalar,v).tolist())

print(norm(v))

print(dot(v,w))

结果如下:

[3, 5]

[-1, -1]

[3, 6]

2.23606797749979

8

为了测试最后一种方法,我们可以创建一个名为vectors_tensorflow.py的文件:

import tensorflow as tf


############GRAPH

vec_1 = tf.placeholder(tf.float32)

vec_2 = tf.placeholder(tf.float32)

scalar = tf.placeholder(tf.float32)


vector_add = tf.add(vec_1,vec_2)

vector_subtract = tf.subtract(vec_1,vec_2)

scalar_multiply = tf.multiply(scalar,vec_1)

norm = tf.norm(vec_1)

dot = tf.tensordot(vec_1, vec_2, 1)

#############DATA

v = [1,2]

w = [2,3]

c = 3

##########SESSION

with tf.Session() as sess:

       result_add = sess.run(vector_add, feed_dict={vec_1:v,vec_2:w})

       result_sub = sess.run(vector_subtract, feed_dict={vec_1:v,vec_2:w})

       result_mul = sess.run(scalar_multiply, feed_dict={scalar:c,vec_1:v})

       result_norm = sess.run(norm , feed_dict={vec_1:v})

       result_dot = sess.run(dot, feed_dict={vec_1:v,vec_2:w})


###########OUTPUT

print(result_add.tolist())

print(result_sub.tolist())

print(result_mul.tolist())

print(result_norm)

print(result_dot)

结果:

[3.0, 5.0]

[-1.0, -1.0]

[3.0, 6.0]

2.236068

8.0
总结

从最简单的事情开始是学习TensorFlow的最佳方法之一。通过对向量对象使用不同的方法,我希望你(和我)——TensorFlow初学者——在将来用于更复杂的任务之前,将了解如何使用TensorFlow。  

 

原文地址:https://www.codeproject.com/Articles/1274830/An-introduction-to-the-TensorFlow-Vector-objects

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.0455s