[英]ValueError: Error when checking input: expected flatten_input to have 3 dimensions, but got array with shape (22, 12)
[英]Error when checking input: expected flatten_input to have 4 dimensions, but got array with shape (404, 13)
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
data = keras.datasets.boston_housing
(x_train , y_train) , (x_test , y_test) = data.load_data()
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28 , 28 )),
keras.layers.Dense(128 , activation="relu"),
keras.layers.Dense(10 , activation="softmax")
])
model.compile(optimizer="adam" , loss="sparse_categorical_crossentropy" , metrics=["accuracy"])
model.fit(x_train , y_train ,epochs=5 )
test_loss , test_acc = model.evaluate(x_test , y_test)
print("tested acc: ", test_acc)
Flatten
層是將3D+張量變成2D。 我猜這個 model 是為二進制 MNIST 設計的,它具有不同的輸入形狀,並且您嘗試在另一個數據集上使用它。 Boston Housing Dataset 已經有 2D 輸入,所以在這里沒有意義。 您可以通過更改輸入形狀來運行此程序,但這沒有意義:
keras.layers.Flatten(input_shape=(13,)),
您所要做的就是將其刪除,它會正常運行。 然后,您必須更改損失 function、指標和最終激活 function,因為您正在處理回歸問題。 最終更正后的代碼:
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
data = keras.datasets.boston_housing
(x_train , y_train) , (x_test , y_test) = data.load_data()
model = keras.Sequential([
keras.layers.Dense(128 , activation="relu"),
keras.layers.Dense(1)
])
model.compile(optimizer="adam" , loss="mae")
model.fit(x_train , y_train ,epochs=5 )
test_loss = model.evaluate(x_test , y_test)
print("test loss: ", test_loss)
32/102 [========>.....................] - ETA: 0s - loss: 5.9563
102/102 [==============================] - 0s 682us/sample - loss: 6.7218
test loss: 6.721758244084377
Flatten
用於使 2d 數據像圖像一樣平坦,所以基本上你在 1d 列表中轉換 2d 列表,所以你應該將Flatten
更改為Input
。
第二個錯誤是聲明輸入形狀。
input_shape=(28 , 28 )
您聲明了28x28
,但我認為您想要 28 個樣本和 28 個特征。 這是不變的。 為了正確地做到這一點,您將輸入形狀定義為靈活的,它將匹配訓練和預測中的任意數量的樣本。 您需要做的就是傳遞一個樣本具有多少個特征
input_shape=(28, )
這是它應該的樣子
model = keras.Sequential([
keras.layers.Input(input_shape=(28, )),
keras.layers.Dense(128 , activation="relu"),
keras.layers.Dense(10 , activation="softmax")
])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.