TensorFlow预测所有输入的相同概率

时间:2016-07-08 20:37:17

标签: python neural-network tensorflow

我有一个用于图像识别的模型。我正在训练模型识别三个类,每个类有1500-3000个图像。我在训练期间监控交叉熵和准确度,我看到它们随着模型训练而改进。训练结束后,我重新加载模型并用它来预测一些额外的图像。为了证明我所看到的,然后我使用该模型来预测4个新图像的类成员资格。一个图像是合法的,一个是全0,一个是1,一个只是一个空数组。我的数据是按比例缩放的,所以这基本上给了我一个全0的数组,一个在.5&s;一个,一个在1&1;左右,另一个在0&s; s附近。下面是我重新加载模型和预测新图像的代码。

ckpt = tf.train.get_checkpoint_state("./complex_model/")
        saver = tf.train.import_meta_graph(ckpt.model_checkpoint_path + '.meta')

        x_image = tf.get_collection("x")[0]
        keep_prob = tf.get_collection("keep_prob")[0]
        batch_size_var = tf.get_collection("batch_size")[0]
        logits = tf.get_collection("logits")[0]
        y = tf.get_collection("y")[0]

        with tf.Session() as sess:
            saver.restore(sess, ckpt.model_checkpoint_path)
            logger.info("Model restored: {0}".format(ckpt.model_checkpoint_path))
            image, _ = ImageUtil().reformat(images, None, 3)
            image = np.concatenate((image, np.ndarray([1,60,60, 1])))
            image_names.append("no val")
            image = np.concatenate((image, np.ones([1,60,60, 1])))
            image_names.append("ones")
            image = np.concatenate((image, np.zeros([1,60,60, 1])))
            image_names.append("zeros")

            feed_dict = {x_image: image, keep_prob: 1, batch_size_var: image.shape[0]}

            prediction, logits = sess.run([y, logits], feed_dict=feed_dict)

我可以看到重新加载的模型是最新的,因为我使用全局步骤并训练了数千次迭代,并且它始终使用正确的全局步骤附加数加载模型。但是,该模型预测我提供的任何数据的相同logits和概率。我错过了一步还是忽略了会引起这种情况的事情?下面是类预测的JSON响应,我已经验证了这正是我的sess.run返回的内容。我在培训期间包含了断点,以确保所有图像在训练阶段都不会返回相同的logits,但事实并非如此。

   "predictions": {
    "/data/predict/actual_image.jpg": [
      0.39970365166664124, 
      0.3874140679836273, 
      0.21288223564624786
    ], 
    "no val": [
      0.39970365166664124, 
      0.3874140679836273, 
      0.21288223564624786
    ], 
    "ones": [
      0.39970365166664124, 
      0.3874140679836273, 
      0.21288223564624786
    ], 
    "zeros": [
      0.39970365166664124, 
      0.3874140679836273, 
      0.21288223564624786
    ]
  }, 

我添加了一些额外的代码来查看我的权重,我注意到我的所有第一层权重都是nan的问题。

    variables = tf.get_collection(tf.GraphKeys.VARIABLES)
    layer_1_weights = variables[0].eval() <- all nan
    layer_2_weights = variables[2].eval() <- -2 - 2
    layer_3_weights = variables[4].eval() <- -.11 - .31
    layer_4_weights = variables[6].eval() <- -.08 -.3

0 个答案:

没有答案