1
我試圖在使用keras訓練我的LSTM時添加自定義指標。請參見下面的代碼:張量數學後張量數學運算
from keras.models import Sequential
from keras.layers import Dense, LSTM, Masking, Dropout
from keras.optimizers import SGD, Adam, RMSprop
import keras.backend as K
import numpy as np
_Xtrain = np.random.rand(1000,21,47)
_ytrain = np.random.randint(2, size=1000)
_Xtest = np.random.rand(200,21,47)
_ytest = np.random.randint(1, size=200)
def t1(y_pred, y_true):
return K.tf.count_nonzero((1 - y_true))
def t2(y_pred, y_true):
return K.tf.count_nonzero(y_true)
def build_model():
model = Sequential()
model.add(Masking(mask_value=0, input_shape=(21, _Xtrain[0].shape[1])))
model.add(LSTM(32, return_sequences=True))
model.add(LSTM(64, return_sequences=False))
model.add(Dense(1, activation='sigmoid'))
rms = RMSprop(lr=.001, decay=.001)
model.compile(loss='binary_crossentropy', optimizer=rms, metrics=[t1, t2])
return model
model = build_model()
hist = model.fit(_Xtrain, _ytrain, epochs=1, batch_size=5, validation_data=(_Xtest, _ytest), shuffle=True)
上述代碼的輸出如下所示:
上1000個樣本列車,驗證對200個樣本 曆元1/1 1000/1000 [====== ========================] - 5s - loss:0.6958 - t1:5.0000 - t2:5.0000 - val_loss:0.6975 - val_t1:5.0000 - val_t2: 5.0000
所以看來,方法t1和t2都產生完全相同的輸出,這讓我很困惑。有什麼可能會出錯,我怎麼能得到補充張量y_true?
背景故事:我試圖爲自己的模型編寫自定義指標(F1分數)。凱拉斯似乎沒有那些容易獲得的。如果有人知道更好的方法,請幫助我指出正確的方向。