我已经训练过二元分类器模型 . 模型类包含 self.cost
, self.initial_state
, self.final_state
和 self.logits
参数 . 它只用 tf.train.Saver
保存:
saver = tf.train.Saver(tf.global_variables(), max_to_keep=1)
saver.save(session, 'model.ckpt')
模型训练完成后,我将其加载为:
with tf.variable_scope("Model", reuse=False):
model = MODEL(config, is_training=False)
with tf.Session() as session:
saver = tf.train.Saver(tf.global_variables())
saver.restore(session, 'model.ckpt')
但是,我的 model.run
函数返回交叉熵丢失,这是图中的最后一个操作 . 我不需要丢失,我需要每个批处理元素的模型预测
logits = tf.sigmoid(tf.nn.xw_plus_b(last_layer, self.output_w, self.output_b))
其中 last_layer
是 800x1
矩阵,然后我将其重塑为 32x25x1
(batch_size,sequence_length,1)矩阵 . 正是该矩阵包含[0-1]范围内的模型预测值 .
那么,我该如何使用这个模型来预测单个元素矩阵 1x1x1
?
1 回答
添加计算精度所需的OP,就像我在下面复制的那样(只是从我手边最近的模型中复制出来) .
现在,当您运行模型时(在测试或培训期间),将sess.run调用的准确性添加为:
要么
当你调用
sess.run
时,你所做的就是告诉tensorflow来计算你要求的任何值 . 您需要将它传递给执行这些计算所需的任何数据 . Tensorflow是懒惰的,它明确地需要产生您请求的结果 . 例如 . 如果您运行上面列出的第二个sess.run
版本,则不会运行优化程序,因此您的权重将不会更新 .请注意,您可以在训练网络后添加OP,因为它们实际上都没有添加任何变量,因此它们不会影响保存/恢复过程 .