当我们应用CNN网络时似乎需要tf.equal()
功能。在下面的情况中,tf.equal()
返回不正确的结果。
with tf.Graph().as_default():
images, labels = inputs("./test_data", [64, 64], 10, True)
logits = inference(images, 2, 1.0)
acc = accuracy(logits, labels)
saver = tf.train.Saver()
#predict_image(saver, logits)
eval_once(saver, logits, acc, labels)
def eval_once(saver, logits, acc, labels):
with tf.Session() as sess:
ckpt = tf.train.get_checkpoint_state("./model/")
if ckpt and ckpt.model_checkpoint_path:
saver.restore(sess, ckpt.model_checkpoint_path)
print "Model Loaded!"
else:
print "Model Not Found!"
return
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess, coord = coord)
l = tf.argmax(labels,1)
p = tf.argmax(logits,1)
print "labels"
print sess.run(l)
print "preds"
print sess.run(p)
print sess.run(tf.equal(l, p))
print "%.5f" % sess.run(acc)
coord.request_stop()
coord.join(threads, stop_grace_period_secs = 10)
在代码中,输入将按file_queue
读取图像,inference
定义我们的CNN网络。 inference
的输出是最后一个完全连接的层的logits。在我的例子中,标签是one_hot编码的,有2个类,所以它应该是[1,0]或[0,1]。
结果如下:
labels
[0 0 1 0 1 0 0 0 1 0]
preds
[0 1 0 1 0 0 1 0 1 1]
[ True True True True True True True True True True]
0.90000
从结果中我们发现标签和preds在索引1处不相等(从索引0开始)。但是,tf.equal()
为我们提供了True
。它与索引2和索引3相同。
然后我在其他一些案例中测试tf.equal()
,结果是正确的。
那么,怎么会发生呢?
(我使用file_queue读取图像并应用tf.train.batch
或tf.train.shuffle
来创建用于训练和测试的批处理。就像张量流示例中的cifar 10示例一样)
答案 0 :(得分:1)
在思考之后,有一种可能性,即每次拨打sess.run()
file_queue
时,<Style TargetType="StackPanel" x:Key="expand">
<Setter Property="Width" Value="48"></Setter>
<Style.Triggers>
<!--TO EXPAND-->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsPressed, ElementName=btnExpandirMenu,PresentationTraceSources.TraceLevel=High}" Value="True" />
<Condition Binding="{Binding Width, ElementName=menuLateral,PresentationTraceSources.TraceLevel=High, UpdateSourceTrigger=PropertyChanged}" Value="48" />
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="OUT"/>
<BeginStoryboard Name="IN">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" To="358" Duration="0:00:0.2"/>
</Storyboard>
</BeginStoryboard>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
<!--TO CLOSE-->
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsPressed, ElementName=btnExpandirMenu}" Value="True"/>
<Condition Binding="{Binding ActualWidth, ElementName=menuLateral}" Value="358"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.EnterActions>
<StopStoryboard BeginStoryboardName="IN"/>
<BeginStoryboard Name="OUT">
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Width" To="48" Duration="0:00:0.2"/>
</Storyboard>
</BeginStoryboard>
</MultiDataTrigger.EnterActions>
</MultiDataTrigger>
</Style.Triggers>
</Style>
都会读取随机播放的图片和标签,以便获得结果。