Tensorflow学习笔记(一)
张量(tensor)
张量:多维数组(列表)
阶:张量的维数
维数 | 阶 | 名字 | 例子 |
---|---|---|---|
0-D | 0 | 标量 scalar | s=1 2 3 |
1-D | 1 | 向量 vector | v=[1,2,3] |
2-D | 2 | 矩阵 matrix | m=[[1,2,3],[4,5,6],[7,8,9]] |
n-D | n | 张量 tensor | t=[[[… |
数据类型
tf.float32 tf.int32 …
import tensorflow as tf
a = tf.constant([1.0,2.0])#定义常量
b = tf.constant([3.0,4.0])
result = a+b
print(result)
out[1]:
Tensor("add:0", shape=(2,), dtype=float32)
add是节点名,0是第0个输出,shape是维度
计算图(Graph)
搭建神经网络计算过程,只搭建不运算
x = tf.constant([[1.0,2.0]])
w = tf.constant([[3.0],[4.0]])
y = tf.matmul(x,w)
print(y)
out[2]:
Tensor("MatMul_1:0", shape=(1, 1), dtype=float32)
会话(Session)
执行计算图中的节点运算
with tf.Session() as sess:
print(sess.run(y))
out[3]:
[[11.]]
参数
权重W,用变量表示,随机给初始值
w = tf.Variable(tf.random_normal([2,3], stddev=2, mean=0, seed=1))
其中tf.truncated_normal()去掉过大偏离的正态分布
tf.random_uniform()平均分布
tf.zeros 全0数组
tf.ones 全1数组
tf.fill 全定值数组
神经网络的实现过程
step1:准备数据集,提取特征,作为输入喂给神经网络(neural network)
step2:搭建NN结构,从输入到输出(先搭建计算图,再使用会话执行)
(NN前向传播算法------------->计算输出)
step3:大量特征数据喂给NN,迭代优化NN参数
(NN反向传播算法------------->优化参数训练模型)
step4:使用训练好的模型预测和分类
前向传播
搭建模型,实现推理(以全连接网络为例)
eg.生产一批零件将体积x1和重量x2为特征输入NN,通过NN后输出一个数值
# 模拟单个神经网络的计算
# create weight
# w1是输入层的权重矩阵,他的shape是[2,3],即2维数组,长度为3,
w1 = tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1))
# w2是隐藏层的权重矩阵,shape是[3,1],即3维数组,长度为1
w2 = tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1))
# create input x shape(1,2)
x = tf.constant([[0.7, 0.9]])
#定义前向传播过程
# 先计算隐藏层的数据,x的输出,y的输入
a = tf.matmul(x, w1)
# 计算y
y = tf.matmul(a, w2)
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(y.eval())
用tf.placeholder占位,在sess.run函数中使用feed_dict喂数据
喂一组
x = tf.placeholder(tf.float32,shape=(1,2))
sess.run(y,feed_dict={x:[[0.5,0.6]]})
喂多组
x = tf.placeholder(tf.float32,shape=(None,2))
sess.run(y,feed_dict={x:[[0.1,0.2],[0.2,0.3],[0.3,0.4]]})
反向传播
训练模型参数,在所有参数上用梯度下降,使用NN模型在训练数据上的损失函数最小。
损失函数(loss):
预测值(y)与已知答案(y_)的差距
均方误差
MSE:MSE(y_,y)
loss=tf.reduce_mean(tf.square(y_ - y))
反向传播的训练方法
以减小loss值为优化目标
train_step=tf.train.GraadientDescentOptimizer(learning_rate).minimize(loss)
train_step=tf.train.MonentumOptimizer(learning_rate,momentum).minimize(loss)
train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)
学习率
决定参数每次更新的幅度
搭建神经网络的“八股”
准备
import
常量定义
生成数据集
前向传播
定义输入、参数和输出
x=
y_=
w1=
w2=
a=
y=
反向传播
定义损失函数loss和反向传播方法train_step
生成会话
训练STEPS轮
with tf.Session() as sess:
init_op = tf.global_variables_initializer()
sess_run(init_op)
STEPS = 3000
for i in range(STEPS):
start =
end =
sess.run(train_step, feed_dict{:})