Chapter1 Getting Started with TensorFlow
TensorFlow设计流程
1 数据标准化:
data=tf.nn.batch_norm_with_global_normalization(...)
2 划分数据集
训练集、验证集、测试集
3 设置超参数:
learning_rate=0.01
batch_size=100
iterations=1000
…
4 变量和占位符的初始化:
a_var=tf.constant(42) //常量,不可变
x_input=tf.placeholder(tf.float32,[None,input_size])
y_input=tf.placeholder(tf.float32,[None,num_classes])
//tf.placeholder占位符,tf.float32为数据类型,x值可变,通过feed_dict传入x参数,具体用法如下:
sess=tf.Session()//初始化计算图
x=tf.placeholder(tf.string)
y=tf.placeholder(tf.float16)
...
with tf.Session() as sess:
output=sess.run(x,feed_dict={x:'hello tf',y:3.14,...})
//在Session run时就会将参数传入占位符
5 定义模型结构:
y_pred=tf.add(tf.mul(x_input,weight_matrix),b_matrix) //tf.add tf.mul为tf基本运算函数
6 损失函数声明
loss=tf.reduce_mean(tf.square(y_actual-y_pred)
7 模型初始化与训练
with tf.Session(graph=graph) as sess:
...
sess.run(...)
...
或者
sess=tf.Session(graph=graph)
sess.run(...)
过拟合或欠拟合的问题
9 调参
10 部署
——————————————————————————————————————————————————
Tensor的声明
固定的tensor创建方法:
用0填充的Tensor:zero_tsr=tf.zeros([row_dim,col_dim],type=int/float)
用1填充的Tensor:ones_tsr=tf.ones([row_dim.col_dim],type=int/float)
用任意常量填充的Tensor:filled_tsr=tf.fill(row_dim,col_dim],any_constant)
用现有常量中填充的Tensor:constant_tsr=tf.constant([1,2,3],shape=[1,3])
//tf.constant()这一函数能够用来将值广播式地传入数组中,tf.constant(42,[row_dim,col_dim]与tf.fill()效果一样
相似tensor的创建方法:
zeros_similar=tf.zeros_like(constant_tsr)
ones_similar=tf.ones_like(constant_tsr)
//因为这些tensor是以之前的tensor的shape和type建立的,所以需要按顺序初始化,同时初始化会报错
序列tensor的创建方法:
linear_tsr=tf.linespace(start=0,stop=1,num=3) ==> [0,0.5,1]//含1
integer_seq_tsr=tf.range(start=6,limit=15,delta=3) ==>[6,9,12]//不含15
随机tensor的创建方法:
randunif_tsr=tf.random_uniform([row_dim,col_dim],minval=0,maxval=1)//一致分布,在[0,1)范围内随机
randnorm_tsr=tf.random_normal([row_dim,col_dim],mean=0.0,stddev=1.0)//正态分布随机数
runcnorm_tsr=tf.truncated_normal([row_dim,col_dim],mean=0.0,stddev=1.0)//在指定平均值的两个标准偏差范围内对正态分布截断随机
shuffled_output=tf.random_shuffle(input_tensor)//沿着输入的tensor的第一维随机排列(以行为单位进行随机排序)
cropped_output=tf.random_crop(input_tensor,crop_size)//对输入的tensor进行随机切割
在函数中封装tensor创建变量:
my_var=tf.Variable(tf.zeros([row_dim,col_dim}))
占位符和变量的使用
通过Variable()函数创建变量并初始化:
my_var=tf.Variable(tf.zeros([2,3]))
sess=tf.Session()
initialize_op=tf.global_variables_initializer()
sess.run(initialize_op)
0 Tensor的变量初始化图示:
TensorFlow的变量初始化方法:
全局初始化
initiallizer_op=tf.global_variables_initializer()
有顺序控制的初始化
sess=tf.Session()
first_var=tf.Variable(tf.zeros([2,3)])
sess.run(first_var.initializer)
second_var=tf.Variable(tf.zeros_like(first_var))
sess.run(second_var.initializer)
矩阵的使用
矩阵的创建:
A=tf.diag([1.0,1.0,1.0])//3*3的对角矩阵
B=tf.truncated_nomal([2,3])//2*3的处于指定平均值的两个标准偏差范围内对正态分布截断随机
C=tf.random_uniform([2,3])//2*3的正态分布随机数的矩阵,每次运行结果会变化
D=tf.convert_to_tensor(np.array([[1.,2.,3.],[-3.,-7.,-1.],[0.,5.,-2.]]))//3*3指定值的矩阵
E=tf.fill([2,3],5.0)//以5.0填充的2*3的矩阵
矩阵运算:
sess.run(A+B)//矩阵加
sess.run(A-B)//矩阵减
sess.run(tf.matmul(B,A))//矩阵乘
//matmul()函数可以通过参数指定矩阵是否转置或是否是稀疏矩阵等
sess.run(tf.transpose(A))//转置
sess.run(tf.matrix_determinant(A))//计算矩阵的值
sess.run(tf.matrix_inverse(A)//计算矩阵的逆
//如果矩阵是正定矩阵,求逆的方法是基于乔里斯基分解,否则LU分解
sess.run(tf.cholesky(identity_matrix))//乔里斯基分解
sess.run(tf.self_adjoint_eig(A))//生成特征值和特征向量,格式为第一行是特征值,剩余部分是特征向量
操作声明
sess.run(tf.div(3,4)//返回值为int型
sess.run(tf.truediv(3,4)//返回值为float型