【发布时间】:2019-12-27 06:34:32
【问题描述】:
我有一个 LSTM 模型,可以使用多元智能手机传感器数据对人类活动进行二元分类。这两个类别不平衡(1:50)。因此,我想使用 F1 分数作为指标,但我看到它已被弃用。
以前是best practice to use a callback function 用于确保将其应用于整个数据集的度量标准,但是,最近是TensorFlow addons reintroduced the F1-Score。
我现在无法将此分数应用于我的功能 API。这是我目前正在运行的代码:
import tensorflow as tf
import tensorflow_addons as tfa
from tensorflow import kerasdef
create_model(n_neurons=150, learning_rate=0.01, activation="relu", loss="binary_crossentropy"):
#create input layer and assign to current output layer
input_ = keras.layers.Input(shape=(X_train.shape[1],X_train.shape[2]))
#add LSTM layer
lstm = keras.layers.LSTM(n_neurons, activation=activation)(input_)
#Output Layer
output = keras.layers.Dense(1, activation="sigmoid")(lstm)
#Create Model
model = keras.models.Model(inputs=[input_], outputs=[output])
#Add optimizer
optimizer=keras.optimizers.SGD(lr=learning_rate, clipvalue=0.5)
#Compile model
model.compile(loss=loss, optimizer=optimizer, metrics=[tfa.metrics.F1Score(num_classes=2, average="micro")])
print(model.summary())
return model
#Create the model
model = create_model()
#fit the model
history = model.fit(X_train,y_train,
epochs=300,
validation_data=(X_val, y_val))
如果我对度量参数 average 使用另一个值(例如,average=None 或 average="macro"),那么在拟合模型时会收到一条错误消息:
ValueError: 两个形状中的维度 0 必须相等,但是是 2 和 1。形状是 [2] 和 [1]。对于具有输入形状的“AssignAddVariableOp”(操作:“AssignAddVariableOp”):[]、[1]。
如果我使用值 average="micro",我不会收到错误,但在整个学习过程中 F1 分数是 0,而我的损失会减少。
我相信我在这里仍然做错了什么。谁能给我解释一下?
【问题讨论】:
标签: python tensorflow keras