Я хочу расширить выход сети на два выхода в этом коде
# Model architecture
input = Input(shape = (max_len,))
model = Embedding(input_dim = len(words) + 2, output_dim = embedding, input_length = max_len, mask_zero = True)(input)
model = Bidirectional(LSTM(units = 50, return_sequences=True, recurrent_dropout=0.1))(model)
model = TimeDistributed(Dense(50, activation="relu"))(model)
crf = CRF(num_tags+1) # CRF layer
out = crf(model) # output
model = Model(input, out)
model.compile(optimizer="rmsprop", loss=crf.loss_function, metrics=[crf.accuracy])
(исходный код на https://github.com/Akshayc1/named-entity-recognition.git). Я хочу, чтобы функция потерь была суммой потерь для этих двух выходов, а точность была средним значением точности для этих двух выходов, я следовала доступным инструкциям:
model = TimeDistributed(Dense(50, activation="relu"))(model)
model1 = TimeDistributed(Dense(50, activation="relu"))(model)
crf1 = CRF(num_tags+1) # CRF layer
crf2 = CRF(num_tags+1)
out1 = crf1(model) # output
out2 = crf2(model1)
model = Model(input, [out1, out2])
def custom_loss(y_true, y_pred1, y_pred2):
loss1 = losses.categorical_crossentropy(y_true,y_pred1)
loss2 = losses.categorical_crossentropy(y_true,y_pred2)
return (loss1 + loss2)/2
def Custom_accuracy(y_true, y_pred1,y_pred2, k=10):
acc1 = K.mean(K.in_top_k(y_pred, K.argmax(y_true, axis=-1), k), axis=-1)
acc2 = K.mean(K.in_top_k(y_pred1, K.argmax(y_true, axis=-1), k), axis=-1)
acc = (acc1 + acc2)/2
return acc
model.compile(optimizer="rmsprop", loss=custom_loss,metrics=Custom_accuracy)
, но это показывает ошибку:
TypeError: custom_loss() missing 1 required positional argument: 'y_pred2'