【问题标题】:how to write predict_generator output to a file over a loop?如何通过循环将 predict_generator 输出写入文件?
【发布时间】:2018-06-18 08:23:32
【问题描述】:

我有一个大型图像数据集,我想在其上运行 predict_generator。由于内存问题,我无法同时运行所有这些。这个想法是

通过循环图像范围并对其进行预测,以迭代方式将少量图像提供给生成器。

将预测保存到文件中

稍后在循环中打开文件以读取所有预测以计算代码中提到的概率。

validation_generator = ImageDataGenerator(rescale=1./255).flow_from_directory(path, target_size=(img_width, img_height),
                                                        batch_size=6,shuffle=False)


print("generator built")
print (counter)
#file = open('Failed.py', 'w')
#for x in file:
 #   for i in range(counter):
  #      features = model.predict_generator(validation_generator,steps=2)



print("features found")

model = Sequential()
model.add(Flatten(input_shape=(3, 3, 1536)))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(6, activation='softmax'))
model.load_weights(top_model_weights_path)
print("top model loaded")
prediction_proba = model.predict_proba(features)
prediction_classes = model.predict_classes(features)
print(prediction_proba)
print(prediction_classes)
print("original file names")
print(validation_generator.filenames)

问题是应该如何将不同的预测保存在一个文件中。我尝试为文件创建一个 for 循环,但不确定它应该如何工作?如果有人可以为所定义的目标提供提示,那就太好了。

【问题讨论】:

    标签: tensorflow machine-learning deep-learning keras imagenet


    【解决方案1】:

    预测和保存

    i = 0
    maximumPredictions = ??
    for x,y in generator: #if the generator doesn't have y, use only "for x in..."
        predictions = model.predict(x)
        numpy.save('predictions/prediction' + str(i) +".npy", predictions)
        i+=1
    
        if i == maximumPredictions:
            break;
    

    加载和处理

    files = [name for name in os.listdir('predictions')]
    for file in files:
        prediction = numpy.load('predictions/"+file)
    
        #do what you want with the loaded predictions. 
    

    【讨论】:

    • 在for循环中预测和保存,生成器是指validation_generator吗?你所说的model.predict是指model.predict_generator吗?
    • 您拥有的任何生成器。可以是validation_generator。但不,确实是predict
    • 它使我的原始代码执行起来更慢。它只对 3 张图像做出了很多预测,这不应该是这种情况
    • 我们无法真正控制生成器的输出。最多,您可以检查它是否定义了len(generator)。然后,您可以使用经过打乱的索引范围来使用x,y = generator[index] 进行循环。
    猜你喜欢
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2017-08-26
    相关资源
    最近更新 更多