发布于2019-12-30 15:49 阅读(555) 评论(0) 点赞(2) 收藏(0)
我已经使用二进制文件中的以下数据(标签,文件名,数据(像素))训练了卷积神经网络(CNN):
[array([2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1, 0, 2, 1,
0, 2, 1, 0, 2, 1, 0]), array(['10_c.jpg', '10_m.jpg', '10_n.jpg', '1_c.jpg',
'1_m.jpg', '1_n.jpg', '2_c.jpg', '2_m.jpg',
'2_n.jpg', '3_c.jpg', '3_m.jpg', '3_n.jpg',
'4_c.jpg', '4_m.jpg', '4_n.jpg', '5_c.jpg',
'5_m.jpg', '5_n.jpg', '6_c.jpg', '6_m.jpg',
'6_n.jpg', '7_c.jpg', '7_m.jpg', '7_n.jpg',
'8_c.jpg', '8_m.jpg', '8_n.jpg', '9_c.jpg',
'9_m.jpg', '9_n.jpg'],
dtype='<U15'), array([[255, 252, 255, ..., 255, 255, 255],
[136, 137, 138, ..., 114, 110, 111],
[200, 200, 199, ..., 179, 178, 177],
...,
[146, 157, 165, ..., 202, 202, 201],
[228, 225, 222, ..., 219, 221, 223],
[128, 127, 127, ..., 133, 129, 127]])]
每批包含所有图像,并运行30个epohs:
EPOCH 0
0 0.476923
DONE WITH EPOCH
EPOCH 1
0 0.615385
DONE WITH EPOCH
EPOCH 2
0 0.615385
DONE WITH EPOCH
EPOCH 3
0 0.538462
DONE WITH EPOCH
EPOCH 4
0 0.384615
DONE WITH EPOCH
...
...
EPOCH 28
0 0.615385
DONE WITH EPOCH
EPOCH 29
0 0.692308
DONE WITH EPOCH
我的问题是我想尝试新图像(测试),并想知道返回的类(0,1,2)。在这种情况下我该怎么办?换句话说,我训练了CNN,但是如何测试呢?
编辑1
对于评估准确性点,测试20张图像时得到以下结果:
EPOCH 0
0 1.0
DONE WITH EPOCH
EPOCH 1
0 1.0
DONE WITH EPOCH
EPOCH 2
0 1.0
DONE WITH EPOCH
EPOCH 3
0 1.0
DONE WITH EPOCH
EPOCH 4
0 1.0
DONE WITH EPOCH
EPOCH 5
0 1.0
DONE WITH EPOCH
EPOCH 6
0 1.0
DONE WITH EPOCH
EPOCH 7
0 1.0
DONE WITH EPOCH
EPOCH 8
0 1.0
DONE WITH EPOCH
EPOCH 9
0 1.0
DONE WITH EPOCH
EPOCH 10
0 1.0
DONE WITH EPOCH
EPOCH 11
0 1.0
DONE WITH EPOCH
EPOCH 12
0 1.0
DONE WITH EPOCH
EPOCH 13
0 1.0
DONE WITH EPOCH
EPOCH 14
0 1.0
DONE WITH EPOCH
EPOCH 15
0 1.0
DONE WITH EPOCH
EPOCH 16
0 1.0
DONE WITH EPOCH
EPOCH 17
0 1.0
DONE WITH EPOCH
EPOCH 18
0 1.0
DONE WITH EPOCH
EPOCH 19
0 1.0
DONE WITH EPOCH
EPOCH 20
0 1.0
DONE WITH EPOCH
EPOCH 21
0 1.0
DONE WITH EPOCH
EPOCH 22
0 1.0
DONE WITH EPOCH
EPOCH 23
0 1.0
DONE WITH EPOCH
EPOCH 24
0 1.0
DONE WITH EPOCH
EPOCH 25
0 1.0
DONE WITH EPOCH
EPOCH 26
0 1.0
DONE WITH EPOCH
EPOCH 27
0 1.0
DONE WITH EPOCH
EPOCH 28
0 1.0
DONE WITH EPOCH
EPOCH 29
0 1.0
DONE WITH EPOCH
在应用“ 获取网络为测试数据生成的标签”点时,得到以下信息:
EPOCH 0
0 0.0
DONE WITH EPOCH
EPOCH 1
0 0.0
DONE WITH EPOCH
EPOCH 2
0 0.0
DONE WITH EPOCH
EPOCH 3
0 0.0
DONE WITH EPOCH
EPOCH 4
0 0.0
DONE WITH EPOCH
EPOCH 5
0 0.0
DONE WITH EPOCH
EPOCH 6
0 0.0
DONE WITH EPOCH
EPOCH 7
0 0.0
DONE WITH EPOCH
EPOCH 8
0 0.0
DONE WITH EPOCH
EPOCH 9
0 0.0
DONE WITH EPOCH
EPOCH 10
0 0.0
DONE WITH EPOCH
EPOCH 11
0 0.0
DONE WITH EPOCH
EPOCH 12
0 0.0
DONE WITH EPOCH
EPOCH 13
0 0.0
DONE WITH EPOCH
EPOCH 14
0 0.0
DONE WITH EPOCH
EPOCH 15
0 0.0
DONE WITH EPOCH
EPOCH 16
0 0.0
DONE WITH EPOCH
EPOCH 17
0 0.0
DONE WITH EPOCH
EPOCH 18
0 0.0
DONE WITH EPOCH
EPOCH 19
0 0.0
DONE WITH EPOCH
EPOCH 20
0 0.0
DONE WITH EPOCH
EPOCH 21
0 0.0
DONE WITH EPOCH
EPOCH 22
0 0.0
DONE WITH EPOCH
EPOCH 23
0 0.0
DONE WITH EPOCH
EPOCH 24
0 0.0
DONE WITH EPOCH
EPOCH 25
0 0.0
DONE WITH EPOCH
EPOCH 26
0 0.0
DONE WITH EPOCH
EPOCH 27
0 0.0
DONE WITH EPOCH
EPOCH 28
0 0.0
DONE WITH EPOCH
EPOCH 29
0 0.0
DONE WITH EPOCH
为什么我会得到0
或1
?具有这些值是否有意义(即没有分数)?
编辑2
为了获取网络为测试数据生成的标签,在打印出标签值和每个时期的准确性时,我得到了以下内容(始终0
为标签,尽管我只期望其中一个0
或2
仅一个,并且精度为1
):
EPOCH 0
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
EPOCH 1
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
EPOCH 2
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
EPOCH 3
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
EPOCH 4
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
EPOCH 5
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
.....
.....
EPOCH 28
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
EPOCH 29
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] 1.0
DONE WITH EPOCH
谢谢。
一般讨论;一般交流
通常,为了测试神经网络,您需要获取未用于训练的新标签数据,将网络应用于此数据(即,应用前馈过程),并评估结果的准确性(与您知道是真实的标签相比)。
如果您没有这样的新数据(也就是说,如果您将所有数据都用于训练)并且无法生成新数据,那么我建议您将您的训练数据,将其分开进行训练和测试,然后重新运行训练程序从一开始就根据训练数据。重要的是测试数据将是未使用的数据,以便能够评估模型的性能。
评估准确性
现在,假设您是从这个问题开始谈论网络,则可以执行类似的操作来测量测试数据的准确性:
accuracy_test = sess.run(accuracy, feed_dict={x: test_data, y: test_onehot_vals})
其中,test_data
和test_onehot_vals
是你测试的照片(以及相应的标签)。
回想一下,为了进行培训,您可以运行以下命令:
_, accuracy_val = sess.run([train_op, accuracy], feed_dict={x: batch_data, y: batch_onehot_vals})
请注意,我没有用于train_op
的评估accuracy_test
。这是由于以下事实:测试性能时,您没有优化权重或类似的东西(可以这样train_op
做)。您只需应用当前拥有的网络。
获取网络为测试数据生成的标签
最后,如果您想要测试数据的实际标签,则需要获取的值tf.argmax(model_op, 1)
。因此,您可以将其设置为单独的变量,例如,在线上方
correct_pred = tf.equal(tf.argmax(model_op, 1), tf.argmax(y,1))
你可以做:
res_model=tf.argmax(model_op, 1)
correct_pred = tf.equal(res_model, tf.argmax(y,1))
and then evaluate it together with accuracy_test
as follows:
res, accuracy_test = sess.run([res_model,accuracy], feed_dict={x: test_data, y: test_onehot_vals}).
Applying the network on unlabeled data
After you finished testing the network, and assuming you are satisfied with the results, you can move on and apply the network on new and unlabeled data. For example by doing
res_new = sess.run(res_model, feed_dict={x: new_data})
.
Note that in order to produce res_model
(which basically means just applying the network on the input) you don't need any labels, so you don't need y
values in your feed_dict. res_new
will be the new labels.
作者:黑洞官方问答小能手
链接:https://www.pythonheidong.com/blog/article/192573/8d1ba809a1de3687d01e/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!