在keras中训练具有多个输入3D阵列的CNN



我需要使用42次CT扫描的(128x128x128(补丁来训练3D_Unet模型。

我的输入数据是128x128x128,用于CT扫描和口罩。我将数组的形状扩展到(1281281281(。其中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)

这是我在增加轴为0的数组形状后使用.model.fit选项时遇到的错误。

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])

您必须将形状的numpy数组列表(128、128、128,1(转换为堆叠的5维形状numpy数组(42、128、128128、1(。您可以使用:model.fit(np.array(train_arrays_list), np.array(mask_arrays_list), batch_size=1, ...)

最新更新