如何应用训练有素的神经网络?

时间:2019-05-30 18:23:40

标签: python tensorflow machine-learning save

[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中     提高类型(e)(node_def,op,消息)” 在我看来,Tensorflow特定的错误出现之前: “未知错误:无法重命名'model / model.ckpt'” 和 “由op'save_13 / SaveV2'引起,定义于:”, 然后有一条很长的路,大约87行, 再次重复“未知错误”。

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

不幸的是,到目前为止,我还没有发现任何可用于各种互联网搜索的内容,但是我觉得让它起作用并不难。 预先谢谢你。

1 个答案:

答案 0 :(得分: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')就能解决问题。