我正在尝试使用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
答案 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.这就是为什么当我将测试数据输入模型时,模型将由于测试数据的像素范围很小,因此不会对模型产生任何影响,因此会一直输出相同的预测值。
希望有所帮助,即使可能不是你的情况。