簡體   English   中英

檢查輸入時出錯:預期 flatten_input 有 4 個維度,但得到形狀為 (404, 13) 的數組

[英]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.

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