处理流程
- 定义数据
- 定义模型
- 计算损失
- 训练优化
1.定义数据
tf.placeholder
x = tf.placeholder(tf.float32, [None, 784], name = 'input')
y = tf.placeholder(tf.float32, [None,], name = 'label')
2.定义模型
模型即计算图,各种计算为节点,输入、输出数据(Tensor)为边的图。定义模型,即构造一个图,即定义一些计算节点,并以各节点的输入和输出张量为边,将不同的计算节点连接。
定义节点会加入默认的图中,也可以将节点加入指定的图。
利用tf.layers包下的预定义层,定义网络各个层。一个网络层相当有一个计算操作。
#两全连接层
d1=tf.layers.Dense(units=3)//定义层op
y1 = d1(x)//边x连接两个操作
d2=tf.layers.Dense(units=4)//定义层op
y2 = d2(y1)//边y1连接两个操作
如果预定义层无法满足要求,可以通过tf.nn包下的各种原始神经网路运算来实现,
w1 = tf.get_variable(
name = variable_name + '_W1',
dtype = tf.float32,
shape = [768, 50]
)
b1 = tf.get_variable(
name = variable_name + '_b1',
dtype = tf.float32,
shape = [50]
)
y1 = tf.nn.xw_plus_b(x,w1,b1)//节点
w2= tf.get_variable(
name = variable_name + '_W2',
dtype = tf.float32,
shape = [768, 50]
)
b2 = tf.get_variable(
name = variable_name + '_b2',
dtype = tf.float32,
shape = [50]
)
y2 = tf.nn.xw_plus_b(y1,w1,b1)//节点
还可以借助tf.math包下的各种基本数学运算和linalg包的线性代数运算,来实现各层的运算。
w1 = tf.get_variable(
name = variable_name + '_W1',
dtype = tf.float32,
shape = [768, 50]
)
b1 = tf.get_variable(
name = variable_name + '_b1',
dtype = tf.float32,
shape = [50]
)
y1 = tf.math.add(tf.linagl.matmul(x, w1), b1)
w2= tf.get_variable(
name = variable_name + '_W2',
dtype = tf.float32,
shape = [768, 50]
)
b2 = tf.get_variable(
name = variable_name + '_b2',
dtype = tf.float32,
shape = [50]
)
y2 = tf.math.add(tf.linalg.matmul(y1, w2), b2) //节点
3.计算损失
评估预测值
y_ = sess.run(y2,feed_dict={x:input})
优化模型,需要定义损失函数,可以用预定义的损失函数,也可以用基本函数组合来自定义。
loss = tf.losses.mean_squared_error(labels=y, predictions=y_)
4.训练优化参数
TensorFlow 提供了执行标准优化算法的优化器。这些优化器被实现为 tf.train.Optimizer
的子类
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
训练,迭代更新参数
for i in range(100):
_, loss_value = sess.run(train, loss,feed_dict = {x:input,labels:y})