TypeError:__call __()接受2个位置参数,但是在制作神经网络时给出了3个

我正在为我的神经网络进行超参数搜索。我的代码在第一次迭代中运行良好。但是,在第二次迭代中,它引发了以下错误:

TypeError:调用()接受2个位置参数,但给出了3个

我的代码是:


def model(conv_layer,filters):

    i1 = Input(shape=(7000,208))
    i2 = Input(shape=(7000,))
    for j in range(conv_layer):
        if j == 0:
            c1 = Conv1D(filters,kernel_size=4,activation='relu')(i1)
        else:
            c1 = Conv1D(filters,activation='relu')(c1)

    c1 = AveragePooling1D(2)(c1)
    #c1 = Dropout(0.2)(c1)


    c1 = flatten()(c1)

    print('pos')
    for i in range(1):

        if i == 0:
            c2 = Dense(64,activation='relu')(i2)
            #c2 = Dropout(dropout)(c2)
        else:
            c2 = Dense(64,activation='relu')(c2)
            #c2 = Dropout(dropout)(c2)


    print('concat')
    c = concatenate([c1,c2])

    print('here')
    for i in range(1):
        x = Dense(256,activation='relu',kernel_initializer='normal')(c)
        #x = Dropout(0.25)(x)

    print('output')
    output = Dense(5,activation='softmax')(x)
    print('')
    model = Model([i1,i2],[output])

    model.summary()

    model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adam(),metrics=['accuracy'])

    return model

if __name__ == '__main__':


    nb_conv = [2,3,4,5,6]
    conv_filters = [100,150,200,250,300,350,400]


    for conv_layer in nb_conv:
        for filters in conv_filters:

            print('conv layer : ',conv_layer,'   filter : ',filters)

            model = model(conv_layer,filters)
            training_generator,validation_generator = data_generation_on_the_fly()

            history = model.fit_generator(generator=training_generator,validation_data=validation_generator,use_multiprocessing=True,workers=6)



            plt.subplot(211) 

            plt.plot(history.history['acc'])  
            plt.plot(history.history['val_acc'])  
            plt.title('model accuracy')  
            plt.ylabel('accuracy')  
            plt.xlabel('epoch')  
            plt.legend(['train','test'],loc='upper left')  

            plt.subplot(212)  
            plt.plot(history.history['loss'])  
            plt.plot(history.history['val_loss'])  
            plt.title('model loss')  
            plt.ylabel('loss')  
            plt.xlabel('epoch')  
            plt.legend(['train',loc='upper left')  

            completename_acc = path_for_figs + '/' + str(conv_layer) + '_' + str(filters) + '.png'
            plt.savefig(completename_acc)
            plt.close()
            print('time for next iteration')

            keras.backend.clear_session()

因此,当我的conv_layer为2且conv_filters为150(即第二次迭代)时,会抛出错误


Traceback (most recent call last):
  File "model.py",line 126,in <module>
    model = model(conv_layer,filters)
TypeError: __call__() takes 2 positional arguments but 3 were given

有人可以解释为什么我会收到此错误,因为当conv_layer为2且conv_filters为100时它会在第一次迭代中运行吗?见识将不胜感激。

snmpnms 回答:TypeError:__call __()接受2个位置参数,但是在制作神经网络时给出了3个

这里存在名称冲突。 重命名您的模型功能,以便将其与真实模型区分开来

更改

def model(conv_layer,filters):

def get_model(conv_layer,filters):
    ....
本文链接:https://www.f2er.com/3151014.html

大家都在问