【发布时间】:2017-11-23 18:03:46
【问题描述】:
我对 Keras/Tensorflow 比较陌生,所以如果问题是基本的,我深表歉意。 我正在尝试在 VGG16 模型之上训练一个模型。
对于我正在使用的 VGG16:
input_tensor = Input(shape=(img_height, img_width, 3), name='Image_input')
vgg16 = VGG16(include_top=False, weights='imagenet', input_tensor=input_tensor)
然后是我要训练的模型:
seq_model = Sequential(name='seq_input')
seq_model.add(Flatten(input_shape=vgg16.output_shape[1:], name='flatten'))
seq_model.add(Dense(256, activation='relu', name='dense1'))
seq_model.add(Dense(62, activation='relu', name='dense2'))
seq_model.add(Dropout(0.5))
seq_model.add(Dense(nb_classes, activation='sigmoid', name='Output'))
seq_model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
将两者结合起来:
model = Model(input=vgg16.input, output=seq_model(vgg16.output))
model.compile(loss='binary_crossentropy',
optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),
metrics=['accuracy'])
数据增强:
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
classes=classes,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
classes=classes,
class_mode='binary')
适合
model.fit_generator(train_generator,
steps_per_epoch=nb_train_samples//batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size)
当我尝试训练模型时,代码似乎中断了;如果我单独运行它们,它似乎可以工作,但是当我将它们组合起来时,我会得到下面的错误(添加完整的回溯以防它有用)
Found 200 images belonging to 2 classes.
Found 80 images belonging to 2 classes.
Epoch 1/30
Traceback (most recent call last):
File "C:/Users/nikfotei/Documents/Content/content/inHousemodel/trainModel.py", line 76, in <module>
validation_steps=nb_validation_samples // batch_size)
File "C:\ProgramData\Anaconda3\envs\py353\lib\site-packages\keras\legacy\interfaces.py", line 87, in wrapper
return func(*args, **kwargs)
File "C:\ProgramData\Anaconda3\envs\py353\lib\site-packages\keras\engine\training.py", line 2077, in fit_generator
class_weight=class_weight)
File "C:\ProgramData\Anaconda3\envs\py353\lib\site-packages\keras\engine\training.py", line 1791, in train_on_batch
check_batch_axis=True)
File "C:\ProgramData\Anaconda3\envs\py353\lib\site-packages\keras\engine\training.py", line 1413, in _standardize_user_data
exception_prefix='target')
File "C:\ProgramData\Anaconda3\envs\py353\lib\site-packages\keras\engine\training.py", line 154, in _standardize_input_data
str(array.shape))
ValueError: Error when checking target: expected seq_input to have shape (None, 2) but got array with shape (16, 1)
Process finished with exit code 1
有什么想法吗? 如果有任何问题,请在 cmets 中告诉我
【问题讨论】:
-
你能告诉我们你的标签在训练和测试中的形状是什么吗?
-
@DvirSamuel 我正在使用 flow_from_dir() 方法,它可以识别 2 个类,所以我猜 [[0, 1]] 抱歉不清楚!
标签: python-3.x tensorflow keras