【发布时间】:2018-11-15 07:54:36
【问题描述】:
我已经使用 TensorFlow 训练了一个神经网络。训练后,我保存它并再次将其加载到新的 '. py' 文件以避免意外再培训。当我用一些额外的数据对其进行测试时,我发现它为相同的数据预测了不同的事情。理论上不应该为相同的数据计算相同的东西吗?
一些信息
前馈网络
4 个隐藏层,每个隐藏层 900 个神经元
5000 个训练周期
达到约 80% 的准确度
使用来自 sklearn 的 normalize 对数据进行标准化。预处理
成本函数:tensorflow.nn.softmax_cross_entropy_with_logits
优化器:tf.train.AdamOptimizer
我将数据作为矩阵提供给我的网络,就像我用于训练的方式一样。 (每行包含一个数据样本,列与输入神经元一样多)
在十个具有相同数据的预测周期中,我的网络在至少 2 个周期内产生不同的结果(到目前为止最多观察到 4 个) 怎么会这样。从理论上讲,所有发生的事情都是 W_i*x_i + b_i 形式的数据处理计算。由于我的 x_i、W_i 和 b_i 不再变化,为什么预测会发生变化?模型重新加载例程可能有错误吗?
with tf.Session() as sess:
saver = tf.train.import_meta_graph('path to .meta')
saver.restore(sess, tf.train.latest_checkpoint('path to checkpoints'))
result = (sess.run(tf.argmax(prediction.eval(feed_dict=x:input_data}),1)))
print(result)
【问题讨论】:
-
可能在某处使用了一些您未定义但随机初始化的权重?
-
检查两件事。 .pb 文件的行为是否相同?如何生成 input_data?
-
我使用 tf train Saver。这将我的网络保存为 xy ckpt。标准例程保存几个文件:xy ckpt 数据、xy ckpt 元数据、xy ckpt 索引和检查点。我将尝试使用 .pb 并讲述我的观察结果。我使用 matplotlib pyplot 读取我的图像,使用来自 sklearn 的 normalize 对其进行标准化,将其分解为一维数组并将其打包到一个列表中,然后使用 dtype float32 转换为 numpy 数组。
-
我用 .pb 文件格式测试过。 -> 没有变化我尝试逐行输入我的数据 -> 没有变化最奇怪的是,它要么将所有给定的数据正确分类,要么将所有给定的数据分类错误,预测中没有变化(比如 80 个正确的 100 个)
标签: python tensorflow machine-learning neural-network