代码之家  ›  专栏  ›  技术社区  ›  TheTechGuy

Keras度量问题

  •  0
  • TheTechGuy  · 技术社区  · 5 年前

    我正在使用最新版本的tensorflow(1.13)。我使用keras api来训练lstm网络。

    我不能和你一起训练 tf.keras.metrics.Precision() tf.keras.metrics.Recall()

    它正在编译。但在训练中,我犯了以下错误

    InvalidArgumenterRor:断言失败:[预测必须大于等于0] [条件x>=y未按元素顺序保存:x(稠密系数3/biasadd:0)=] [[2.72658144E-06 1.17555362E-06 1.96436554E-06…]]…][年 (度量值3/精度1/转换/x:0)=][0][{{node metrics_3/precision_1/assert_greater_equal/assert/assertguard/assert}]]

    模型非常简单,如下所示

    model = Sequential()
    model.add(LSTM (120,activation = "tanh", input_shape=(timesteps,dim), return_sequences=True))
    model.add(LSTM(120, activation = "tanh", return_sequences=True))
    model.add(LSTM(120, activation = "tanh", return_sequences=True))
    model.add(LSTM(120, activation = "tanh", return_sequences=True))
    model.add(LSTM(120, activation = "tanh", return_sequences=True))
    model.add(LSTM(120, activation = "tanh", return_sequences=True))
    model.add(Dense(dim))
    model.compile(optimizer="adam", loss="mse",  metrics=[tf.keras.metrics.Precision()])
    
    history = model.fit(data,data, 
                        epochs=100,
                        batch_size=10,
                        validation_split=0.2,
                        shuffle=True,
                        callbacks=[ch]).history
    

    是虫子还是我做错了什么?

    0 回复  |  直到 5 年前
        1
  •  1
  •   pafi    5 年前

    Precision recall 是衡量分类性能的指标。因为你在使用 mse 最后一层的线性激活,你更愿意做一个回归。

    如果要分类,请确保在 [0,1] . 这可以通过使用来获得。 sigmoid softmax 在最后一层激活,取决于你的问题。(二进制或n类分类)

    进一步确保输出形状正确,因为 return_sequences=True 在你的最后一层,这可能不是你想要的。

    编辑 :由于您 model.fit 现在我可以看到,您正在尝试自动编码您的数据。因此 precision 作为一个指标在这里没有意义。