【问题标题】:How to apply a trained neural network?如何应用经过训练的神经网络?
【发布时间】:2019-05-30 18:23:40
【问题描述】:

[Python 3.7, Tensorflow] 我训练了一个神经网络。一切正常,它会学习,但是一旦完成学习,它就会关闭并且失去进步。现在我要做的是输入新数据并手动查看网络的性能。

我已经摆弄了

saver = tf.train.Saver()
saver.save(sess, 'model/model.ckpt')

但这总是会导致一英里长的错误报告以“未知错误:无法重命名'model/model.ckpt'”等结尾。

上下文中的代码如下所示:

def train_neural_network(x):
    training_data = generate_training_data() # i cut getting training data since its a bit out of context here, but its basically like mnist data

    prediction = neural_network_model(x) # normal, 3-layer feed forward NN
    cost = tf.reduce_mean( tf.square(prediction - y) )
    optimizer = tf.train.AdamOptimizer(0.01).minimize(cost)

    hm_epochs = 10
    saver = tf.train.Saver()

    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

        for epoch in range(hm_epochs+1):
            epoch_loss = 0

            for i in range(10):
                epoch_x, epoch_y = training_data

                _, c = sess.run([optimizer, cost], feed_dict = {x: epoch_x, y: epoch_y})

        saver.save(sess, 'model/model.ckpt')

我尝试在 main 中调用这个经过训练的神经网络:

train_neural_network(x)

X, Y = generate_training_data()

prediction = neural_network_model(x)
saver = tf.train.Saver()

with tf.Session() as sess:

     saver.restore(sess, 'model/model.ckpt')
     result = sess.run(prediction, feed_dict={x: X})

print(Y, result)

到目前为止,它都在一个文件中,但我也可以使用两个单独的文件。

这会导致一个错误,它表示通常的 python 错误,由其路径组成并以
结尾 “……在 _do_call 中 raise type(e)(node_def, op, message)" 在我认为之前,出现了特定于 Tensorflow 的错误: “未知错误:无法重命名‘model/model.ckpt’” 和 "由操作 'save_13/SaveV2' 引起,定义在:", 然后是一条很长很长的路,大约有 87 行, “未知错误”再次重复。

我想要的是带有来自神经网络预测输出的打印输出标签。 (代码中的打印行。)

不幸的是,到目前为止,我还没有找到任何适用于各种互联网搜索的东西,但我觉得让它发挥作用应该不会太难。 提前谢谢你。

【问题讨论】:

    标签: python tensorflow machine-learning save


    【解决方案1】:

    如果您查看模型输出检查点的文件夹 (/model),您应该会看到每次保存 3 个单独的文件:model.ckpt-xxx.data、model.ckpt-xxx.index 和 model。 ckpt-xxx.meta,其中 xxx 是 Tensorflow 附加的检查点的 ID。

    当您想要恢复某个检查点时,您还必须添加 ID,因为通常在训练期间会创建同一网络的多个检查点,以便我们稍后可以在必要时重新训练网络。

    所以我会查看模型文件夹并仔细检查文件名,我的猜测是 如果您只创建一个检查点,saver.restore(sess, 'model/model.ckpt-0') 就可以解决问题。

    【讨论】:

    • 是的,我看到了文件。我有以下文件: - 检查点 - model.ckpt.data-00000-of-00001 - model.ckpt.index - model.ckpt.index.tempstate13666753728790215124 - model.ckpt.meta --- 不幸的是它没有工作通过将 -0 添加到保存或恢复行。有什么想法吗?
    • 恢复。它给出了以下错误:{ NotFoundError(参见上面的回溯):从检查点恢复失败。这很可能是由于检查点中缺少变量名称或其他图形键。请确保您没有根据检查点更改预期的图表。原始错误:在检查点 [[node save_49/RestoreV2 (defined at my_path/neural_network.py:120)]] } 中找不到 Key Variable_600
    • 这两个文件(main 和 train_neural_network)是否在同一个文件夹中?在我看来,Tensorflow 无法在您在主文件中指定的文件夹中找到检查点,因此文件名或目录可能是罪魁祸首。
    • 是的,它们甚至在同一个文件中。对不起,如果我的结构引起了混乱。模型文件夹与 main 文件夹位于同一文件夹中。
    猜你喜欢
    • 2011-04-07
    • 1970-01-01
    • 2010-11-20
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多