使用TensorFlow构建神经网络时如何解决model.summary()的ValueError
问题:调用model.summary()触发ValueError错误
使用TensorFlow构建神经网络时,调用model.summary()查看网络结构,触发如下错误:
ValueError: Cannot convert '784' to a shape.
用户完整代码如下:
import os os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers, models from tensorflow.keras.datasets import mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.reshape(-1, 28*28).astype("float32") / 255.0 x_test = x_test.reshape(-1, 28*28).astype("float32") / 255.0 # sequential model for one input to one output model = keras.Sequential( [ keras.Input(shape=(28*28)), layers.Dense(512, activation='relu'), layers.Dense(256, activation='relu'), layers.Dense(10), ] ) print(model.summary()), import sys sys.exit() model.compile( loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer=keras.optimizers.Adam(learning_rate=0.001), metrics=["accuracy"], ) model.fit(x_train, y_train, batch_size=32, epochs=5, verbose=2) model.evaluate(x_test, y_test, batch_size=32, verbose=2)
解决方案
错误根源在于keras.Input(shape=(28*28))这一行:
shape参数要求传入单元素元组来表示一维输入的维度,但(28*28)计算后等价于整数784,不是合法的元组格式(元组需要包含逗号,比如(784,))。
只需将输入层的shape参数修改为以下两种形式之一即可:
方法1:直接指定元组
keras.Input(shape=(784,))
方法2:保留计算式并添加逗号
keras.Input(shape=(28*28,))
修改后重新运行代码,model.summary()就能正常输出网络结构摘要。
内容的提问来源于stack exchange,提问作者Isesele Victor
相关产品推荐
相关产品推荐

