我有以下模型:
model = Sequential()
model.add(layers.InputLayer(input_shape=(5,)))
model.add(layers.Dense(20, activation='relu'))
model.add(layers.Dense(30, activation='relu'))
model.add(layers.Dense(1))
model.compile(loss=['mean_absolute_error'], optimizer='adam',
metrics=[metrics.MeanAbsoluteError(), metrics.MeanRelativeError(normalizer=[1])])
我的訓練/測驗集具有以下形狀:
x_train.shape
(114589, 5)
y_train.shape
(114589, 1)
x_test.shape
(49110, 5)
y_test.shape
(49110, 1)
我收到此錯誤
ValueError: Shapes (None,) and (None, 1) are incompatible
在我向模型tf.keras.metrics.MeanRelativeError添加新指標后,出現此錯誤。請問這是什么原因造成的?我該如何解決?
uj5u.com熱心網友回復:
這對我來說似乎是一個錯誤,或者至少這種行為沒有得到很好的記錄。出現問題是因為y_pred內部受到擠壓(出于某種原因)。作為一種解決方法,您可以使用具有與用于相同邏輯MeanRelativeError的自定義指標:
import tensorflow as tf
def _mean_relative_error(normalizer):
def mean_relative_error(y_pred, y_true):
return tf.math.divide_no_nan(tf.abs(y_true - y_pred), normalizer)
return mean_relative_error
model = tf.keras.Sequential()
model.add(tf.keras.layers.InputLayer(input_shape=(5,)))
model.add(tf.keras.layers.Dense(20, activation='relu'))
model.add(tf.keras.layers.Dense(30, activation='relu'))
model.add(tf.keras.layers.Dense(1))
model.compile(loss='mae', optimizer='adam', metrics=[tf.keras.metrics.MeanAbsoluteError(), _mean_relative_error(normalizer=[1])])
model.fit(tf.random.normal((10, 5)), tf.random.normal((10, 1)), epochs=2, batch_size=3)
Epoch 1/2
4/4 [==============================] - 1s 7ms/step - loss: 0.7566 - mean_absolute_error: 0.7209 - mean_relative_error: 0.7209
Epoch 2/2
4/4 [==============================] - 0s 6ms/step - loss: 0.6665 - mean_absolute_error: 0.6625 - mean_relative_error: 0.6625
<keras.callbacks.History at 0x7f04dcfa4390>
您可以對normalizer引數進行一些試驗,因為檔案指出它normalizer應該具有與y_pred.
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/452265.html
標籤:Python 张量流 喀拉斯 tf.keras keras-metrics
下一篇:ValueError:尺寸必須相等,但對于具有輸入形狀[?,2]、[?,64]的'{{nodebinary_crossentropy/mul}},尺寸必須是2和64
