![](/img/trans.png)
[英]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.