在发电机上训练 keras 模型,现在如果我这样做
model.predict_generator(test_generator)
那么一切正常,但是我现在如何将其应用于图像?我需要正确地将图像转换为数组(3种颜色)并调用,下面的示例不起作用(opencv中的图像)
data = img.astype(float)/255
model.predict(data)
#ValueError('Error when checking input: expected vgg16_input to have 4 dimensions, but got array with shape (32, 32, 3)',)
或者将打开的图像转换为生成器,但是怎么做呢?
发电机整形:
def Get_generator_data(dir,img_width, img_height, batch_size):
datagen = ImageDataGenerator(rescale=1. / 255)
train_generator = datagen.flow_from_directory(
dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode='categorical',
shuffle=False)
return train_generator
模型创建
def create_model(outNeron, size):
# Загружаем предварительно обученную нейронную сеть VGG16
vgg16_net = VGG16(weights='imagenet', include_top=False,
input_shape=(size, size, 3))
# "Замораживаем" веса предварительно обученной нейронной сети VGG16
vgg16_net.trainable = False
# Создаем составную нейронную сеть на основе VGG16
# Создаем последовательную модель Keras
model = Sequential()
# Добавляем в модель сеть VGG16 вместо слоя
model.add(vgg16_net)
# Добавляем в модель новый классификатор
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(outNeron))
model.add(Activation('softmax'))
return model
模型训练
def Train_Model (model, train_generator, nb_train_samples, batch_size, val_generator, nb_validation_samples):
сheckpoint = ModelCheckpoint('save/mnist-dense.hdf5',
monitor='val_acc',
save_best_only=True)
# Компилируем составную нейронную сеть
model.compile(loss=losses.categorical_crossentropy,
optimizer=Adam(lr=1e-5),
metrics=['accuracy'])
# Обучаем модель с использованием генераторов
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=35,
validation_data=val_generator,
validation_steps=nb_validation_samples // batch_size,
callbacks=[сheckpoint])
模型打印 print(model.summary())
Layer (type) Output Shape Param #
=================================================================
vgg16 (Model) (None, 1, 1, 512) 14714688
_________________________________________________________________
flatten (Flatten) (None, 512) 0
_________________________________________________________________
dense (Dense) (None, 256) 131328
_________________________________________________________________
activation (Activation) (None, 256) 0
_________________________________________________________________
dropout (Dropout) (None, 256) 0
_________________________________________________________________
dense_1 (Dense) (None, 4) 1028
_________________________________________________________________
activation_1 (Activation) (None, 4) 0
=================================================================
Total params: 14,847,044
Trainable params: 132,356
Non-trainable params: 14,714,688
_________________________________________________________________
None
尝试将所有图像读入一个 4D 数组并“输入”这个数组
model.predict()
。