我正在尝试学习一些keras语法并使用Inception v3 example
我有一个4级多类分类玩具问题,因此我从示例中更改了以下行:
NB_CLASS = 4 # number of classes
DIM_ORDERING = 'tf' # 'th' (channels, width, height) or 'tf' (width, height, channels)
我的玩具数据集具有以下维度:
包含所有图像的数组的大小:(595、299、299、3)
包含训练图像的阵列的大小:(416、299、299、3)
包含训练标签的数组的大小:(179,4)
包含测试图像的数组的大小:(179、299、299、3)
包含测试标签的数组的大小:(179,4)
然后我尝试用以下代码训练模型:
# fit the model on the batches generated by datagen.flow()
# https://github.com/fchollet/keras/issues/1627
# http://keras.io/models/sequential/#sequential-model-methods
checkpointer = ModelCheckpoint(filepath="/tmp/weights.hdf5", verbose=1, save_best_only=True)
model.fit_generator(datagen.flow(X_train, Y_train,
batch_size=32),
nb_epoch=10,
samples_per_epoch=32,
class_weight=None, #classWeights,
verbose=2,
validation_data=(X_test, Y_test),
callbacks=[checkpointer])
然后我得到以下错误:
Exception: The model expects 2 input arrays, but only received one array. Found: array with shape (179, 4)`
这可能与此有关,因为《盗梦空间》希望
model = Model(input=img_input, output=[preds, aux_preds])
作为一个高级的Python程序员,我如何给keras中的模型两个标签呢?
最佳答案
我建议你先试试this tutorial。可以找到代码here。
您将在第一部分中看到,它显示了如何使用以下方法从目录加载数据:
.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='binary')
为了输入不同的类,您必须将您的图像放在每个类的一个文件夹中(注意,通过传递标签,可能还有另一种方法)。还要注意,在您的例子中,类模式不能使用“binary”(我认为您应该使用“categorical”):
`"binary"`: binary targets (if there are only two classes),
`"categorical"`: categorical targets,
然后您可以使用已经在Keras中的inceptionv3模型:
from keras.applications import InceptionV3
cnn = InceptionV3(...)
同样要注意的是,培训inceptionv3的例子太少了,因为这个模型非常大(检查here大小)。在这种情况下,您可以做的是转移学习,在接收v3上使用预先训练的权重。请参阅the tutorial中使用预培训网络瓶颈功能的部分:一分钟内90%的准确度。
关于python - Keras |让Inception v3示例运行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37641854/