1. 简单说一下, session.run(), 需要几个参数, fetches, feed_dict, 前者是输出,后者是输入。
tf有个特点,是在模型中定义所有的张量,铺出一张图, session.run 才会真正计算,这里fetches参数中包含的内容就是需要进行计算的变量。
举个例子:
loss = session.run(fetches=[ model.loss],
feed_dict={
model.input_x: x_batch,
model.input_y: y_batch,
model.dropout_keep_prob: FLAGS.dropout_keep_prob,
model.is_training: True,
})
可以用来计算loss
2. 然后使用中发现一个问题, 训练的时候模型需要做反向传播,而测试的时候不需要反向传播(其实这块是从valid验证集不需要反向传播,但是每个epoch需要做一次验证评测引出来的, 具体验证集 测试集 训练集三者区别和作用见这里 训练集、验证集、测试集的作用和区别)
怎么解决这个问题呢, 训练过程其实就是梯度下降过程,也就是优化器
normal_optimizer = tf.train.AdamOptimizer(normal_learning_rate)
op = normal_optimizer.minimize(model.loss, var_list=normal_var_list)
一个简单的例子,然后将 op加到 fetches里就可以实现训练时反向传播了。
参考链接:
https://stackoverflow.com/questions/53058311/tensorflow-multiple-session-run-in-same-iteration
https://github.com/aymericdamien/TensorFlow-Examples/issues/22