用keras实现多尺度cnn,具有两个conv parrelel层。
from keras.models import Model
main_model = Sequential()
main_model.add(Conv2D(32, kernel_size=3, input_shape=(224, 224, 3),activation='relu'))
#main_model.add(Activation('relu'))
main_model.add(MaxPool2D(strides=(2,2)))
main_model.add(Flatten())
#lower features model - CNN2
lower_model1 = Sequential()
lower_model1.add(Conv2D(32, kernel_size=3, input_shape=( 224, 224,3),activation='relu'))
#lower_model1.add(Activation('relu'))
lower_model1.add(MaxPool2D(strides=(2,2)))
lower_model1.add(Flatten())
#merged model
merged_model = Concatenate(axis=-1)([main_model.output, lower_model1.output])
x = Dense(256, activation='relu', kernel_initializer='normal')(merged_model)
x = Dropout(0.25)(x)
output = Dense(2, activation='softmax')(x)
final_model = Model([main_model.input, lower_model1.input], [output])
final_model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
#print 'About to start training merged CNN'
train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
train_generator = train_datagen.flow_from_directory("/content/drive/My Drive/DL_2_Dataset/ZhangLabData2/CellData/chest_xray/train",
target_size=(224, 224), class_mode='binary')
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory("/content/drive/My Drive/DL_2_Dataset/ZhangLabData2/CellData/chest_xray/test",
target_size=(224, 224), class_mode='binary')
def myGenerator(train_generator,train_generator1):
while True:
xy = train_generator.next() #or next(train_generator)
xy1 = train_generator1.next() #or next(train_generator1)
yield (xy[0],xy1[0])
final_train_generator = myGenerator(train_generator, train_generator)
final_test_generator = myGenerator(test_generator, test_generator)
final_model.fit_generator(final_train_generator, samples_per_epoch=512, nb_epoch=10, validation_data=final_test_generator, nb_val_samples=100)
但在执行fit_generator之后:
检查模型输入时出错:传递给模型的Numpy数组列表不是模型预期的大小。预计会看到2个数组,但获得了以下1个数组的列表:[array([[[[[0.5254902,0.5254902,0.5254902], [0.5254902、0.5254902、0.5254902], [0.5322508、0.5322508、0.5322508], ..., [0.21443921、0.21443921、0.21443921 ...
zip()生成器导致错误,所以我创建了另一个生成器。 生成器中出现错误?