我正在为我的神经网络进行超参数搜索。我的代码在第一次迭代中运行良好。但是,在第二次迭代中,它引发了以下错误:
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, kernel_size=4,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', 'test'], 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时它会在第一次迭代中运行吗?见识将不胜感激。
答案 0 :(得分:1)
这里存在名称冲突。 重命名您的模型功能,以便将其与真实模型区分开来
更改
def model(conv_layer,filters):
到
def get_model(conv_layer,filters):
....