在keras ad tensorflow方面,我是一个菜鸟,所以我真的可以使用一些帮助来尝试找出我的代码所遇到的问题。我正在尝试运行自动编码器程序。但是,当我尝试运行该程序时,出现以下错误:ValueError:检查输入时出错:预期input_1具有2维,但数组的形状为(32,256,256,3)。我非常确定该程序在从我的数据库(位于称为train的目录)中提取图像时遇到问题。我在树莓派上破坏了此代码,这是我的代码:
from keras.layers import Input, Dense
from keras.models import Model
import numpy as np
from PIL import Image
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot as plt
image = Image.open('/home/pi/Downloads/neural-network-
master/data/train/class_a/test(2chunk0.wav).png.jpg')
encoding_dim = 28
input_img = Input(shape=(65536,))
encoded = Dense(encoding_dim, activation='relu')(input_img)
decoded = Dense(65536, activation='sigmoid')(encoded)
autoencoder = Model(input_img, decoded)
encoder = Model(input_img, encoded)
encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_layer(encoded_input))
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
train_datagen=ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
directory=r"/home/pi/Downloads/neural-network-master/data/train",
batch_size=32,
class_mode="categorical",
shuffle=True,
seed=42
)
autoencoder.fit_generator(train_generator,
epochs=2,
steps_per_epoch=256,
shuffle=True)
encoded_img = encoder.predict(np.array(image))
print (encoded_img)
decoded_img = decoder.predict(encoded_img)
plt.imshow(decoded_img)
plt.imshow(image)
我一直得到的确切错误是:
ValueError: Error when checking input: expected input_1 to have 2
dimensions, but got array with shape (32, 256, 256, 3)
我再次相信这是程序的一个问题,它与我格式化包含训练数据的目录的方式不同。我的火车目录中有一个名为class_a的目录,并且在class_a中还有两个名为class_1和class_2的目录,以及这些文件夹中的数据。对于这个问题,我可能是错的,但是任何帮助将不胜感激,谢谢!
编辑: 所以我改变了看起来像这样的行: input_img =输入(形状=(65536,)) 对此: input_img =输入(shape =(256,256,3,)) 似乎可以解决部分问题,但是现在当我运行代码时,出现此错误:
ValueError: Error when checking target: expected dense_2 to have 4 dimensions, but got array with shape (262, 1)
再一次,我们将不胜感激!
答案 0 :(得分:0)
当您尝试拟合形状与模型期望的形状不同的数据时,会发生此错误。
在这里,您可以定义形状的预期输入(65536),并尝试将形状为(256,256,3)的数据拟合到其中。
因此,您需要调整输入的形状以匹配模型期望的输入。
尝试一下:
input_img = Input(shape=(256*256*3,))
并将输入数据重塑为形状相同的单个矢量(nb_batch,256 * 256 * 3)