Я выполняю поиск гиперпараметров для моей нейронной сети. Мой код работает нормально для первой итерации. Но во второй итерации он выдает мне следующую ошибку:
TypeError: call () принимает 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? Мы будем признательны за понимание.