Tensor Flow - 使用保存的模型不会返回正确的结果

时间:2017-10-17 07:27:31

标签: python tensorflow deep-learning mnist

我的规格: Windows 10 64, Python 3.6, Tensorflow 1.0.1。

我一直在尝试训练和使用神经网络MNIST数据集:

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data", one_hot=True)

tf.reset_default_graph()

n_nodes_hl1 = 500
n_nodes_hl2 = 500
n_nodes_hl3 = 500
n_classes = 10
batch_size = 100

x = tf.placeholder('float',[None,784])
y = tf.placeholder('float')

current_epoch = tf.Variable(1)

def neural_network_model(data):
    hidden_1_layer = {'weights': tf.Variable(tf.random_normal([784,n_nodes_hl1])),
                      'biases': tf.Variable(tf.random_normal([n_nodes_hl1]))
                      }
    hidden_2_layer = {'weights': tf.Variable(tf.random_normal([n_nodes_hl1,n_nodes_hl2])),
                      'biases': tf.Variable(tf.random_normal([n_nodes_hl2]))
                      }

    hidden_3_layer = {'weights': tf.Variable(tf.random_normal([n_nodes_hl2,n_nodes_hl3])),
                      'biases': tf.Variable(tf.random_normal([n_nodes_hl3]))
                      }

    output_layer = {'weights': tf.Variable(tf.random_normal([n_nodes_hl3,n_classes])),
                      'biases': tf.Variable(tf.random_normal([n_classes]))
                      }

    l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), hidden_1_layer['biases'])
    l1 = tf.nn.relu(l1)

    l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])
    l2 = tf.nn.relu(l2)

    l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), hidden_3_layer['biases'])
    l3 = tf.nn.relu(l3)

    output = tf.matmul(l3, output_layer['weights']) + output_layer['biases']

    return output

saver = tf.train.Saver()

def train_neural_network(x):
    prediction = neural_network_model(x)

    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction,labels=y))

    optimizer = tf.train.AdamOptimizer().minimize(cost)

    hm_epochs = 10

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

        for epoch in range(hm_epochs):
            epoch_loss = 0

            for _ in range(int(mnist.train.num_examples/batch_size)):
                epoch_x,epoch_y = mnist.train.next_batch(batch_size)
                _, c = sess.run([optimizer, cost], feed_dict = {x:epoch_x, y:epoch_y})
                epoch_loss += c

        correct = tf.equal(tf.arg_max(prediction,1), tf.arg_max(y,1))
        accuracy = tf.reduce_mean(tf.cast(correct,'float'))
        saver.save(sess, "/tmp/model.ckpt")

train_neural_network(x)

之后我通过训练有素的模型传递了一个MNIST图像:

import cv2
import numpy as np
mn = cv2.imread('352.png')
mn = cv2.cvtColor(mn,cv2.COLOR_BGR2GRAY)
mn2 = np.array(list(mn.flatten()))

x = tf.placeholder('float')
y = tf.placeholder('float')

with tf.Session() as sess:

    prediction = neural_network_model(x)
    sess.run(tf.global_variables_initializer())
    saver.restore(sess,"/tmp/model.ckpt")

    result = (sess.run(tf.argmax(prediction.eval(feed_dict={x:[ mn2 ]}),1)))
    print(prediction.eval(feed_dict={x:[mn2]}))
    print(result)

不幸的是,模型精度为ca. 95%我一直得到错误的结果 - 不仅错误,而且在不同的运行中也不一致

我们说我通过了8号图像,我得到了9,4,3 ......

模型文件model.ckpt.data-00000-of-00001保存到硬盘驱动器大约是10兆字节。当我在为每个循环进行训练时尝试恢复模型时(如pythonprogramming.net课程所示)模型似乎没有更新,因为文件只有1KB。

我在这里做错了什么?

0 个答案:

没有答案