Tensorflow 学习与复习 Epoch_1 # tensorflow的一些函数方法

来源:互联网 发布:2017年时代网络诗人奖 编辑:程序博客网 时间:2024/06/05 15:11

1:

一个例子

import tensorflow as tf

import numpy as np


# 随机生成数据,100个点,x,y

x_data = np.float32(np.random.rand(2, 100))               #np.random.rand(d0,d1,...,dn) 随机生成n维矩阵

y_data = np.dot([0.100, 0.200], x_data) + 0.300          #np.dot() 矩阵相乘


# 构造一个线性模型

b = tf.Variable(tf.zeros([1]))                                              # tf.zero() 零值初始化()中的数据结构/变量

W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0) )      # tf.random_uniform()   随机初始化/变量

y = tf.matmul(W, x_data) + b                                          # tf.matmul() 矩阵相乘


# 最小化方差

loss = tf.reduce_mean(tf.square(y - y_data))                 # 定义loss函数

optimizer = tf.train.GradientDescentOptimizer(0.5)      # tf.train.GradientDescentOptimizer() 算法,以0.5的learning                                                                                         # rate 来 train

train = optimizer.minimize(loss)                                    # 求最小的loss 


# 初始化变量

init = tf.initialize_all_variables()


# 启动图(graph)

sess = tf.Session()

sess.run(init)


# 拟合平面

for step in range(1000):

    sess.run(init)

    if step%100 == 0:

        print(step, sess.run(W), sess.run(b))


2:

由上面例子,一些基础的常用的函数应该整理一下

同时在之后的学习中遇到新的函数都会整理进来:

numpy 中的:

np.float32() 

np.random.rand(d0d1...dn)    随机生成给定shape的矩阵

np.dot()                  矩阵相乘,类似于tf中的tf.matmul()


tensorflow 中的:

tf.Variable()    定义变量

tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)

高斯分布,均值mean,方差stddev,但是这个seed是什么不知道

tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None) 

阶段高斯分布,随机数分布在[mean-2*stddev,mean+2*stddev]中

tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)

均匀随机分布,范围为[min,max]

tf.zeros(shape, type=tf.float32, name= None)

tf.ones()

tf.ones_like(tensor, dype= None, name= None) 

定义一个与目标tensor大小类型一样的tensor,用1填充

tf.fill(shape, value, name= None)

tf.constant(value, dtype= None, shape= None, name= None)

创建一个常量tensor,按照给出value来赋值,可以用shape来指定其形状。value可以是一个数,也可以是一个list。 
如果是一个数,那么这个常亮中所有值的按该数来赋值。 
如果是list,那么len(value)一定要小于等于shape展开后的长度。赋值时,先将value中的值逐个存入。不够的部分,则全部存入value的最后一个值。

tf.shape(Tensor)                  返回tensor的(形状,。。。)等参数

tf.expand_dims(tensor, dim)          

为tensor加一维,参数dim为加这一个1加在张量shape_list 的shape(tensor)[dim]位置


tf.add() |tf.sub |tf.matmul()          矩阵加减乘

tf.nn.bias_add()

1. tf.add(a, b) 与 a+b

在神经网络前向传播的过程中,经常可见如下两种形式的代码:

  • tf.add(tf.matmul(x, w), b)
  • tf.matmul(x, w) + b

简而言之,就是 tf.add(a, b) 与 a + b二者的区别,类似的也有,tf.assign 与 =(赋值运算符)的差异。

在计算精度上,二者并没有差别。运算符重载的形式a+b,会在内部转换为,a.__add__(b),而a.__add__(b)会再一次地映射为tf.add,在 math_ops.py中相关的映射如下:

_OverrideBinaryOperatorHelper(gen_math_ops.add, "add")
  • 1

In tensorflow what is the difference between tf.add and operator (+)?

2. tf.nn.bias_add 与 tf.add

tf.nn.bias_add 是 tf.add 的一个特例,也即 tf.add 支持的操作比 tf.nn.bias_add 更多。二者均支持 broadcasting(广播机制),也即两个操作数最后一个维度保持一致。

除了支持最后一个维度保持一致的两个操作数相加外,tf.add 还支持第二个操作数是一维的情况

tf.concat(concat_dim, values, name='concat')

http://blog.csdn.net/mao_xiao_feng/article/details/53366163 

tf.sparse_to_dense

(sparse_indices, output_shape, sparse_values, default_value, name=None)

http://blog.csdn.net/mao_xiao_feng/article/details/53365889

tf.pack(values, axis=0, name=’pack’)


将一系列rank-R的tensor打包为一个rank-(R+1)的tensor
# ‘x’ is [1, 4], ‘y’ is [2, 5], ‘z’ is [3, 6]
pack([x, y, z]) => [[1, 4], [2, 5], [3, 6]]       # 沿着第[0]维pack
pack([x, y, z], axis=1) => [[1, 2, 3], [4, 5, 6]]     #沿着第[1]维pack
等价于tf.pack([x, y, z]) = np.asarray([x, y, z]) ,用法与上面的tf.concat类似












原创粉丝点击