【发布时间】:2018-07-25 19:20:58
【问题描述】:
我是机器学习的新手。 实际上,我使用我的 unet 代码使用一张输入图像切片 (192x912) 和一张输出蒙版图像 (192x192) 进行图像分割
我的 Unet 代码包含多个 CNN 层,我通常使用一张输入图像 (192x912) 和一张其对应的掩码二进制图像进行训练。 与上述说明相关的代码如下。
def get_unet():
inputs = Input((img_rows, img_cols, 1))
conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(inputs)
conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
drop1 = Dropout(0.2)(pool1)
conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(drop1)
conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
drop2 = Dropout(0.2)(pool2)
'''''''
return model
model.fit(imgs_train, imgs_mask_train, batch_size=32, epochs=100, verbose=2, shuffle=True, validation_split=0.1, callbacks=[model_checkpoint])
效果很好。但是,现在,我想在训练我的网络时使用多输入图像。因此,我添加了另一个火车数据并编辑我的代码,如下所示。
def get_unet():
inputs = Input((img_rows, img_cols, 1))
conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(inputs)
conv1 = Conv2D(32, (3, 3), activation='relu', padding='same')(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
drop1 = Dropout(0.2)(pool1)
conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(drop1)
conv2 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
drop2 = Dropout(0.2)(pool2)
'''''''
return model
model.fit([imgs_train, imgs_other_train], imgs_mask_train, batch_size=32, epochs=100, verbose=2, shuffle=True, validation_split=0.1, callbacks=[model_checkpoint])
但是当我运行训练代码时,我收到如下错误消息。 “ValueError:检查模型输入时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 1 个数组,但得到了以下 2 个数组的列表:“
我认为我的 U net 需要更改为多输入,但我不知道我必须更改哪里。 请帮助并给我任何cmets。 谢谢。
【问题讨论】:
-
你得到答案了吗?
标签: tensorflow keras image-segmentation unet