簡體   English   中英

Tensorflow Keras:運行model.fit時出現尺寸/形狀錯誤

[英]Tensorflow Keras: Dimension/Shape Error when running model.fit

我正在嘗試將 Tensorflow 和 Keras 用於預測模型。

我首先讀取具有形狀 (7709, 58) 的數據集,然后對其進行規范化:

normalizer = tf.keras.layers.Normalization(axis=-1)
normalizer.adapt(np.array(dataset))

然后我將數據拆分為訓練和測試數據:

train_dataset = dataset[:5000]
test_dataset = dataset[5000:]

我准備了這些數據集:

train_dataset.describe().transpose()
test_dataset.describe().transpose()

train_features = train_dataset.copy()
test_features = test_dataset.copy()

train_labels = train_features.pop('outcome')
test_labels = test_features.pop('outcome')

然后我建立模型:

def build_and_compile_model(norm):
  model = keras.Sequential([
      norm,
      layers.Dense(64, activation='relu'),
      layers.Dense(64, activation='relu'),
      layers.Dense(1)
  ])

  model.compile(loss='mean_squared_error', metrics=['mean_squared_error'],
                optimizer=tf.keras.optimizers.Adam(0.001))
  return model

dnn_model = build_and_compile_model(normalizer)

然后當我嘗試擬合模型時,它失敗了:

history = dnn_model.fit(
    test_features,
    test_labels, 
    validation_split=0.2, epochs=50)

給出以下錯誤:

ValueError: in user code:

    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1021, in train_function  *
        return step_function(self, iterator)
    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1010, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 1000, in run_step  **
        outputs = model.train_step(data)
    File "/usr/local/lib/python3.7/dist-packages/keras/engine/training.py", line 859, in train_step
        y_pred = self(x, training=True)
    File "/usr/local/lib/python3.7/dist-packages/keras/utils/traceback_utils.py", line 67, in error_handler
        raise e.with_traceback(filtered_tb) from None

    ValueError: Exception encountered when calling layer "normalization_7" (type Normalization).
    
    Dimensions must be equal, but are 57 and 58 for '{{node sequential_7/normalization_7/sub}} = Sub[T=DT_FLOAT](sequential_7/Cast, sequential_7/normalization_7/sub/y)' with input shapes: [?,57], [1,58].

有誰知道問題是什么以及我該如何解決? 謝謝!

由於pop ,您丟失了數據框中的outcome列。 嘗試使用提取該列

train_labels = train_features['outcome']
test_labels = test_features['outcome']

bui 是正確的,pop 是問題所在 但是,我會保留 pop,但將“normalizer.adapt”方法移到 pop 后面。 這樣,您就不會將規范化器與標簽相匹配(這沒有意義),並且您不會將標簽用作特征(這可能很糟糕)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM