Обучение CNN с несколькими входными 3D-массивами в керасах - PullRequest
0 голосов
/ 31 марта 2020

Мне нужно обучить 3D_ Unet модель с (128x128x128) патчами 42 сканирования CT.

Мои входные данные 128x128x128 для сканирования CT, а также для масок. Я расширил форму массивов до (128, 128, 128, 1). Где 1 - это канал.

Проблема в том, как заполнить модель моим списком из 40 4D-массивов?

Как я могу использовать model.fit () или model.train_on_batch с правильная форма ввода, указанная в моей модели?

project_name = '3D-Unet Segmentation of Lungs'
img_rows = 128
img_cols = 128
img_depth = 128
# smooth = 1
K.set_image_data_format('channels_last') 
#corresponds to inputs with shape:
#(batch, spatial_dim1, spatial_dim2, spatial_dim3, channels)

def get_unet():
    inputs = Input(shape=(img_depth, img_rows, img_cols, 1))
    conv1 = Conv3D(32, (3, 3, 3), activation='relu', padding='same')(inputs)
    conv1 = Conv3D(32, (3, 3, 3), activation='relu', padding='same')(conv1)
    pool1 = MaxPooling3D(pool_size=(2, 2, 2))(conv1)

    conv2 = Conv3D(64, (3, 3, 3), activation='relu', padding='same')(pool1)
    conv2 = Conv3D(64, (3, 3, 3), activation='relu', padding='same')(conv2)
    pool2 = MaxPooling3D(pool_size=(2, 2, 2))(conv2)

     ....


model = Model(inputs=[inputs], outputs=[conv10])

model.summary()
#plot_model(model, to_file='model.png')

model.compile(optimizer=Adam(lr=1e-5, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.000000199), 
              loss='binary_crossentropy', metrics=['accuracy'])
return model

для списка массивов в качестве входных данных

Что я должен указать в .train_on_batch () или .fit ()?

Это ошибка, которую я получаю при использовании опции .train_on_batch:

ValueError: Ошибка при проверке ввода модели: список Numpy массивов, передаваемых вашей модели, не соответствует размеру, ожидаемому моделью , Ожидается увидеть 1 массив (ов), но вместо этого получен следующий список из 42 массивов

model.train_on_batch(train_arrays_list, mask_arrays_list)

Это ошибка, которую я получаю при использовании опции .model.fit после увеличения формы массивов с осью = 0.

UnboundLocalError: локальная переменная 'batch_index', на которую ссылается перед присваиванием

model.fit(train_arrays_list[0], mask_arrays_list[0], 
          batch_size=1, 
          epochs=50, 
          verbose=1, 
          shuffle=True, 
          validation_split=0.10, 
          callbacks=[model_checkpoint, csv_logger])

1 Ответ

1 голос
/ 31 марта 2020

Вы должны преобразовать свой список numpy массивов формы (128, 128, 128, 1) в сложенный 5-мерный массив numpy формы (42, 128, 128, 128, 1). Вы можете сделать это с помощью: model.fit(np.array(train_arrays_list), np.array(mask_arrays_list), batch_size=1, ...)

...