Набор данных имеет номера c и данные изображения, и попытка объединения двух сетей глубокого обучения.
Рабочий код
def get_model_classif_nasnet():
inputs = Input((128, 128, 3))
base_model = NASNetMobile(include_top=False)#, input_shape=inputs)#, weights=None
x = base_model(inputs)
out1 = GlobalMaxPooling2D()(x)
out2 = GlobalAveragePooling2D()(x)
out3 = Flatten()(x)
out = Concatenate(axis=-1)([out1, out2, out3])
out = Dropout(0.5)(out)
out = Dense(6, activation="sigmoid", name="3_")(out)
model = Model(inputs, out)
model.compile(optimizer=Adam(0.0001), loss=binary_crossentropy, metrics=['acc'])
model.summary()
return model
def data_gen(list_files, id_label_map, batch_size, augment=False):
seq = get_seq()
while True:
shuffle(list_files)
for batch in chunker(list_files, batch_size):
X = [_read(train_images_dir+x+'.dcm', (128,128,3) ) for x in batch ] # [cv2.imread(x) for x in batch]
Y = [id_label_map.get(x) for x in batch]#[id_label_map[get_id_from_file_path(x)] for x in batch]
if augment:
X = seq.augment_images(X)
X = [preprocess_input(x) for x in X]
#Z = [ (x[3][3],x[2][2],x[1][1]) for x in batch] # Or SomeLogic
yield np.array(X), np.array(Y) #,np.array(Z)
модель = get_model_classif_na snet ()
batch_size=64
h5_path = "EPOC_1_Feb_25_model.h5"
checkpoint = ModelCheckpoint(h5_path, monitor='val_acc',save_weights_only=True, verbose=1, save_best_only=True, mode='max')
history = model.fit_generator(
data_gen(train, id_label_map, batch_size, augment=True),
validation_data=data_gen(train, id_label_map, batch_size),
epochs=1, verbose=1,
callbacks=[checkpoint],
steps_per_epoch=len(train) // batch_size,
validation_steps=len(train) // batch_size)
model.load_weights(h5_path)
Код попытки
def get_model_classif_nasnet_2():
inputs = Input((128, 128, 3))
base_model = NASNetMobile(include_top=False)#, input_shape=inputs)#, weights=None
x = base_model(inputs)
out1 = GlobalMaxPooling2D()(x)
out2 = GlobalAveragePooling2D()(x)
out3 = Flatten()(x)
aux_model = Sequential()
aux_model.add(Dense(3, input_dim=3))
aux_model.add(Dense(18,activation='relu'))
aux_model.add(Dropout(0.2))
#aux_model=Flatten()(aux_model)
#out3 = Concatenate([out3,aux_model])
out = Concatenate()([out1, out2, out3,aux_model]) #aux_model])
#out = Concatenate([out,aux_model],axis=1) #aux_model])#axis=1
out = Dropout(0.2)(out)
out = Dense(6, activation="sigmoid", name="3_")(out)
model = Model([inputs,numbers], out)
model.compile(optimizer=Adam(0.0001), loss=binary_crossentropy, metrics=['acc',weighted_loss])#metrics=['acc',weighted_loss]
model.summary()
return model
model = get_model_classif_nasnet_2()
Ошибка:
ValueError: Слой flatten_8 был вызван с вводом, который не является символом c тензор. Полученный тип:. Полный ввод: []. Все входы в слой должны быть тензорами