使用精细调整的初始v3模型对所有输入进行相同的预测

时间:2017-10-06 14:17:52

标签: python-2.7 tensorflow computer-vision deep-learning

我正在尝试使用2个类别微调初始v3模型。这些是我遵循的步骤1.通过更改imagenet_data.py中的类和示例的数量,使用build_image_data.py从自定义数据创建分片文件。使用了labelsfile.txt; 2.在flowers_data.py中相应地更改了值并使用flowers_train.py我训练了模型。 ;我冻结了模型,得到了protobuf文件。 ; 4.我的输入节点(x)需要一批大小为32,大小为299x299x3的批次,所以我通过复制我的测试图像32次并创建了一个输入批处理来破解我的方式。 5.使用输入和输出节点,输入批处理和下面的脚本,我能够打印预测分数

image_data = create_test_batch(args.image_name)
graph=load_graph(args.frozen_model_filename)
x = graph.get_tensor_by_name('prefix/batch_processing/Reshape:0')
y = graph.get_tensor_by_name('prefix/tower_0/logits/predictions:0')
with tf.Session(graph=graph) as sess:
    y_out=sess.run(y, feed_dict={x:image_data})
    print(y_out)

我得到的结果如下:

[[ 0.02264258  0.16756369  0.80979371][ 0.02351799  0.16782859  0.80865341].... [ 0.02205461  0.1794569   0.7984885 ][ 0.02153662  0.16436867  0.81409472]](32)

对于任何图像作为输入,我仅在第3列获得最高分,这意味着我对任何输入都得到相同的预测。

我的过程中是否有任何遗漏?任何人都可以帮我解决这个问题吗? 我在cloudVM中使用ubuntu 16.04中的python 2.7

2 个答案:

答案 0 :(得分:1)

嗨,我也面临着同样的问题,但我发现我没有以与预处理火车相同的方式对测试仪进行预处理,在我的情况下,我通过对两者进行相同的预处理步骤解决了问题我的测试和训练集。 这是我的问题: 培训:

train_image=[]
for i in files:
  img=cv2.imread(i)
  img=cv2.resize(img,(100,100))
  img=image.img_to_array(img)
  img=img/255
  train_image.append(img)
X=np.array(train_image)

但是在预处理测试时,我忘了规范化我的“ img”(意思是执行img = img / 255),因此后来在测试集中添加了img = img / 255这个步骤,就解决了我的问题。

测试集:

  img=cv2.imread(i)
  img=cv2.resize(img,(100,100))
  img=image.img_to_array(img)
  img = img/255
  test_image.append(img)

答案 1 :(得分:0)

我最近遇到了类似的问题,我发现的是我预处理的测试数据与我使用的微调程序中的方法不同。基本上数据范围是不同的 - 对于训练图像,像素范围从0到255,而对于测试图像,像素范围从0到1.这就是为什么当我将测试数据输入模型时,模型将由于测试数据的像素范围很小,因此不会对模型产生任何影响,因此会一直输出相同的预测值。

希望有所帮助,即使可能不是你的情况。