自定义Fashion MNIST编码器训练时出现ValueError输入维度不兼容问题
错误含义解释
该报错为输入形状不匹配错误:你当前定义的编码器模型要求输入的张量形状为(批量大小, 784),即要求单张输入图像提前展平为784维的一维向量;但你实际传入训练接口的x_train数据形状为(32, 28, 28),每个batch内的样本仍是28*28的二维原始图像,形状不符合模型要求因此触发错误。
解决方案
你不需要同时修改模型和数据,二选一即可:
- 方案1:保留现有模型结构,预处理数据匹配模型输入要求
对训练集、测试集执行展平操作即可,代码如下:
处理完成后直接调用x_train = x_train.reshape(-1, 784) x_test = x_test.reshape(-1, 784)model.fit训练即可。 - 方案2:保留原始数据格式,修改模型输入层适配原始数据
如果你不想提前处理数据,可以调整模型输入定义,将展平操作集成到模型内部,修改后的编码器代码如下:#Encoder 适配原始28*28图像输入 from tensorflow.keras.layers import Flatten input1 = Input(shape = (28, 28,)) flatten_layer = Flatten()(input1) hidden1 = Dense(128, activation = 'relu')(flatten_layer) hidden2 = Dense(64, activation = 'relu')(hidden1) hidden3 = Dense(32, activation = 'relu')(hidden2) model = Model(inputs = input1, outputs = hidden3)
内容的提问来源于stack exchange,提问作者coding_ninza
相关产品推荐
相关产品推荐

