如何解决MNIST 自动编码器:ValueError:新数组的总大小必须保持不变,input_shape = [748],output_shape = [28, 28]
我正在尝试构建一个 mnist 自动编码器来学习如何使用整形和编码。
当我运行代码时抛出以下错误:
ValueError: total size of new array must be unchanged,input_shape = [748],output_shape = [28,28]
代码如下:
import tensorflow as tf
import tensorflow.keras as keras
from tensorflow.keras import layers
mnist = tf.keras.datasets.mnist
(x_train,y_train),(x_test,y_test) = mnist.load_data()
x_train,x_test = x_train / 255.,x_test / 255.
enc_in = tf.keras.Input(shape=(28,28))
x = layers.Flatten()(enc_in)
x = layers.Dense(128,activation='relu',name='enc_dense_1')(x)
enc_out = layers.Dense(10,activation='softmax',name='enc_out')(x)
x = layers.Dense(128,name='dec_dense_1')(enc_out)
x = layers.Dense(748,name='dec_dense_2')(x)
dec_out = layers.Reshape(target_shape=(28,28))(x)
autoencoder = keras.Model(inputs=enc_in,outputs=dec_out)
autoencoder.compile(
optimizer='adam',loss=keras.losses.CategoricalCrossentropy(),metrics=['accuracy']
)
print(autoencoder.summary())
autoencoder.fit(x_train,x_train,batch_size=64,epochs=10,validation_split=0.2)
为什么 tensorflow 抱怨输出形状而我的 keras.Input 形状是 (28,28) ?
解决方法
错误不言自明,你犯了一个小错误。
#28 * 28 = 784
x = layers.Dense(748,activation='relu',name='dec_dense_2')(x)
dec_out = layers.Reshape(target_shape=(28,28))(x)
你不小心写了 748
而不是 784
,当然由于这个错误,reshape 不能发生。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。