python - 有谁知道“ValueError:检查输入时出错:”keras 错误是什么意思?
问题描述
当谈到 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)
再一次,我相信这是程序不喜欢我格式化包含训练数据的目录的方式的问题。我在我的 train 目录中有一个名为 class_a 的目录,在 class_a 中有两个名为 class_1 和 class_2 的目录,以及这些文件夹中的数据。关于这个问题我可能是错的,但任何帮助将不胜感激,谢谢!
编辑:所以我将如下所示的行: input_img = Input(shape=(65536,)) 更改为: input_img = Input(shape=(256, 256, 3,)) 这似乎解决了部分问题,但是现在当我运行代码时,我得到了这个错误:
ValueError: Error when checking target: expected dense_2 to have 4 dimensions, but got array with shape (262, 1)
再次感谢任何帮助!
解决方案
当您尝试使用与模型预期的形状不同的形状来拟合数据时,就会发生此错误。
在这里,您定义了形状 (65536,) 的预期输入,并尝试将形状为 (256, 256, 3) 的数据拟合到它。
因此,您需要重新调整输入以匹配模型预期的输入。
尝试这个 :
input_img = Input(shape=(256*256*3,))
并将您的输入数据重塑为相同形状的单个向量 (nb_batch, 256*256*3)
推荐阅读
- go - 无法通过跳过证书从 https 获取 xml
- android - 使用耳机麦克风而不是设备麦克风
- sql - 如何在 PostgreSQL 中计算年份
- android - BLE 设备在完美运行数周后停止与 Android 连接
- python-3.x - 如果在 Python 脚本中使用 sed 命令从文件中删除超过 150 个字符的行
- angular - Ionic 3 无法获取未定义或空引用的属性“有效”
- joomla - Joomla 错误:无法打开流:权限被拒绝
- batch-file - 将带有 GOTO 的批处理脚本转换为单行
- c# - Ninject 视图模型上的绑定属性以进行过滤
- c# - Selenium chromewebdriver,无头 + 使用配置文件。给出 UI 错误