首页 > 解决方案 > U-net:TypeError:__call__() 缺少 1 个必需的位置参数:“输入”

问题描述

我正在研究基于 u-net 的 BraTS Challenge 提供的脑肿瘤数据集的分割。在训练阶段定义模型后发生错误。

错误是:

TypeError                                 Traceback (most recent call last)
<ipython-input-56-d745053f879c> in <module>()
      1 Folders = ReadDataset(PATH)
      2 TrainGenerator = MyGenerator(PATH)
----> 3 Model=unet()
      4 Model.fit_generator(TrainGenerator, epochs=1, steps_per_epoch=25)
      5 #for Index, Folder in enumerate(Folders):

<ipython-input-54-baecfef1ddd3> in unet(pretrained_weights, input_size)
     41     conv10 = Conv2D(1, 1, activation = 'sigmoid')(conv9)
     42 
---> 43     model = Model(input = inputs, output = conv10)
     44 
     45     model.compile(optimizer = Adam(lr = 1e-4), loss = 'binary_crossentropy', metrics = ['accuracy'])

TypeError: __call__() missing 1 required positional argument: 'inputs'
def unet(pretrained_weights = None,input_size = (240, 240,4)):
    inputs = Input(input_size)
    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', 
            kernel_initializer = 'he_normal')(inputs)
    conv1 = Conv2D(64, 3, activation = 'relu', padding = 'same', 
            kernel_initializer = 'he_normal')(conv1)

    .
    .
    .


    conv10 = Conv2D(1, 1, activation = 'sigmoid')(conv9)

    model = Model(input = inputs, output = conv10)

    model.compile(optimizer = Adam(lr = 1e-4), loss = 'binary_crossentropy', 
                              metrics = ['accuracy'])


    return model

训练代码是:

Folders = ReadDataset(PATH)
TrainGenerator = MyGenerator(PATH)
Model=unet()
Model.fit_generator(TrainGenerator, epochs=1, steps_per_epoch=25)
Train, Test, Valid = Split(Folders, 0.8)

我只是想获得一些结果,因为我是深度学习的初学者。任何帮助将不胜感激,我将不胜感激。

标签: pythontensorflow

解决方案


旧版本的 Keras 要求您使用“输入”而不是“输入”作为模型的第一个输入参数的名称。检查您是否可以更新您的 Keras 版本(当前稳定版为 2.2.5)或尝试以下行:

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

可能:

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

代替:

model = Model(input = inputs, output = conv10)

推荐阅读