我用二进制文件中的以下数据(标签、文件名、数据(像素))训练了一个卷积神经网络(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个周期:
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
我的问题是,我想尝试新的图像(test),并想知道返回的类(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\u data和
test\onehot\u vals是您的测试图片(和相应的标签)。
回想一下,对于培训,您可以运行以下操作:
_, accuracy_val = sess.run([train_op, accuracy], feed_dict={x: batch_data, y: batch_onehot_vals})
请注意,在评估准确性测试时,我没有使用训练op。这是因为当你测试你的表现时,你没有优化权重或类似的东西(就像训练一样)。您只需应用当前拥有的网络。
获取网络为测试数据生成的标签
最后,如果需要测试数据的实际标签,则需要获得tf的值。argmax(model\u 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))
然后将其与精度测试一起评估,如下所示:
res, accuracy_test = sess.run([res_model,accuracy], feed_dict={x: test_data, y: test_onehot_vals}).
在未标记数据上应用网络
完成网络测试后,假设您对结果感到满意,您可以继续前进并将网络应用于新的和未标记的数据。例如,通过做
res\u new=sess。运行(res\u model,feed\u dict={x:new\u data})
。
请注意,为了生成
res_model
(这基本上意味着只在输入上应用网络),您不需要任何标签,因此您feed_dict中不需要y
值。res_new
将是新标签。
我有一个关于卷积神经网络()训练的问题。 我成功地使用tensorflow训练了一个网络,它获取一个输入图像(1600像素),然后输出三个匹配的类中的一个。 使用不同的培训课程测试网络,效果良好。然而当我给它一个不同的第四个图像(不包含任何经过训练的3个图像)时,它总是返回一个随机匹配到其中一个类。 我的问题是,如何训练网络来分类图像不属于这三个训练图像中的任何一个?类似的例子是,如果我针对mni
在了解了机器学习概念之后,现在可以将注意力转移到深度学习概念上。深度学习是机器学习的一个分支。深度学习实现的示例包括图像识别和语音识别等应用。 以下是两种重要的深度神经网络 - 卷积神经网络 递归神经网络 在本章中,我们将重点介绍CNN - 卷积神经网络。 卷积神经网络 卷积神经网络旨在通过多层阵列处理数据。这种类型的神经网络用于图像识别或面部识别等应用。CNN与其他普通神经网络之间的主要区别在于
这是我的问题。我训练了一个卷积神经网络,用tensorflow将图像分为两类。我现在想知道如何使用神经网络的权重,并在未标记的随机图像上进行测试。tensorflow中是否有这样的函数,或者我现在应该自己运行卷积吗?
是否有方法按层(而不是端到端)训练卷积神经网络,以了解每一层对最终架构性能的贡献?
注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验。 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组大小为32x32的RGB图像进行分类,这些图像涵盖了10个类别: 飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车。 想了解更多信息请参考CIFAR-10 page,以及Alex Kriz
卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网络由一个或多个卷积层和顶端的全连通层(对应经典的神经网络)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网络能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网络