我是机器学习新手,现在只是在学习教程,但我收到了错误:
ValueError: Could not interpret metric identifier: loss
在:
\keras\src\metrics\__init__.py:205, in get(identifier)
看起来在wrapper.py第532行中
metric_name(key)
应该接收损失函数的名称,但它实际上接收字符串“loss”
以下是错误的相关代码:
def buildNetwork():
classificator = Sequential()
classificator.add(Dense(units = 20, activation='relu', kernel_initializer='random_uniform', input_shape=(30,)))
classificator.add(Dense(units = 20, activation='relu', kernel_initializer='random_uniform'))
classificator.add(Dense(units = 1, activation='sigmoid'))
optimizer = keras.optimizers.Adam(learning_rate=0.001, weight_decay=0.000001)
classificator.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['binary_accuracy'])
return classificator
classifier = KerasClassifier(model=buildNetwork,batch_size=10,epochs=100, loss='binary_crossentropy')
score = cross_val_score(estimator=classifier, X=data, y=truth, cv=10, error_score='raise')
如果在里面
keras_metric_get
我手动设置identifier = "binary_crossentropy"
它工作正常
我不知道是否是兼容性问题,但我有 Keras 3.0.8、TF 2.15.0 和 SciKeras 0.12.0
从 SciKeras 快速入门文档,您应该将模型和损失传递给
KerasClassifier()
。从 KerasClassifier 文档,您还可以传递优化器和指标。
我会避免在
buildNetwork()
和 KerasClassifier()
中定义损失。我会模仿 SciKeras 快速入门文档中的示例,其中仅网络在 buildNetwork()
中定义,其他所有内容(优化器、损失和指标)都在外部定义。
def buildNetwork():
classificator = Sequential()
classificator.add(Dense(units = 20, activation='relu', kernel_initializer='random_uniform', input_shape=(30,)))
classificator.add(Dense(units = 20, activation='relu', kernel_initializer='random_uniform'))
classificator.add(Dense(units = 1, activation='sigmoid'))
return classificator
classifier = KerasClassifier(
model=buildNetwork,
batch_size=10,
epochs=100,
loss='binary_crossentropy',
optimizer=keras.optimizers.Adam(learning_rate=0.001, weight_decay=0.000001),
metrics=['binary_accuracy'],
)