Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试在机器学习程序中使用MNIST/EMNIST字母数据集时出现值错误_Python_Machine Learning_Keras_Mnist - Fatal编程技术网

Python 尝试在机器学习程序中使用MNIST/EMNIST字母数据集时出现值错误

Python 尝试在机器学习程序中使用MNIST/EMNIST字母数据集时出现值错误,python,machine-learning,keras,mnist,Python,Machine Learning,Keras,Mnist,我有一个机器学习程序,我正试图训练使用计算机识别手写字符。我一直收到一个错误 我已经尝试过改变描述数据集形状的元组,但没有成功 import os#用于修改文件、创建目录等。 导入keras#简化TensorFlow库 从pyplot导入matplotlib.pyplot作为plt#图像显示 将numpy导入为高等数学的np#numpy 导入随机#用于在MNIST数据集中拾取随机值 从keras.models导入顺序#为AI学习启用顺序层 从keras.layers导入稠密#启用稠密层 从ker

我有一个机器学习程序,我正试图训练使用计算机识别手写字符。我一直收到一个错误

我已经尝试过改变描述数据集形状的元组,但没有成功

import os#用于修改文件、创建目录等。
导入keras#简化TensorFlow库
从pyplot导入matplotlib.pyplot作为plt#图像显示
将numpy导入为高等数学的np#numpy
导入随机#用于在MNIST数据集中拾取随机值
从keras.models导入顺序#为AI学习启用顺序层
从keras.layers导入稠密#启用稠密层
从keras.layers导入Conv2D#启用二维卷积神经网络层
从keras.layers导入MaxPoolig2D#启用最大池层
从keras.layers导入退出#启用退出层
从keras.layers导入展平#启用展平层
从keras.datasets导入mnist#导入mnist数据集
从emnist导入提取\训练\样本
从keras.callbacks导入ModelCheckpoint#导入ModelCheckpoint以保存进度
图像、标签=提取样本(“字母”)
图像=图像。重塑(-1,28,28,1)
打印(图像)
labels=keras.utils.to_category(labels,num_classes=27)
images=images.astype('float32')
图像/=255
labels=keras.utils.to_category(labels,num_classes=27)
model=Sequential()#使用顺序层进行人工智能培训
添加(Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)))
添加(Conv2D(64,(3,3),activation='relu'))
add(MaxPooling2D(池大小=(2,2)))
model.add(展平())
添加(密集(128,激活='relu'))
模型添加(辍学率=0.3))
添加(密集(27,激活='softmax'))
model.summary()
如果操作系统路径存在(“./saves/main\u EMNIST\u v2.hdf5”):
如果输入(“上一型号的负载重量合适?(Y/N)\t”).lower()=“Y”:
负载=真
其他:
加载=错误
其他:
加载=错误
如果操作系统路径不存在(“./saves/”):
os.makedirs(“保存”)
如果加载:
打印(“从以前的模型拟合加载重量…\t”,end=”“)
型号负载重量(“./saves/main\u EMNIST\u v2.hdf5”)
打印(“完成”)
如果输入(“保存最佳模型拟合的权重?(Y/N)\t”).lower()=“Y”:
save=True;
其他:
save=False;
images=images.reshape(images.shape[0],1,28,28)
"""
标签=keras.utils.to_分类(标签,6)
y_检验=keras.utils.to_分类(y_检验,6)
"""
plt.imshow(图像[54000][0],cmap='gray')
plt.show()
compile(loss=keras.loss.categorical_crossentropy,optimizer=keras.optimizers.Adadelta(),metrics=['accurity']))
回调\u列表=[]
如果保存:
filepath=“./saves/main\u EMNIST\u v2.hdf5”
checkpoint=ModelCheckpoint(文件路径,monitor='acc',verbose=1,save\u best\u only=True,mode='max')
回调\u列表=[检查点]
history=model.fit(图像、标签、批次大小=64、epochs=int(输入(“输入epochs number.建议值为5.\t”)、10)、verbose=1、callbacks=callbacks\u列表)
#为了简洁起见,省略了这一点之后的代码。
我收到了以下错误消息:

Traceback (most recent call last):
  File "OCIR_EMNIST_v2.py", line 74, in <module>
    history = model.fit(images, labels, batch_size=64, epochs=int(input("Input epochs number. Recommended value is 5.\t"), 10), verbose=1, callbacks=callbacks_list)
  File "/home/user/.local/lib/python3.7/site-packages/keras/engine/training.py", line 952, in fit
    batch_size=batch_size)
  File "/home/user/.local/lib/python3.7/site-packages/keras/engine/training.py", line 751, in _standardize_user_data
    exception_prefix='input')
  File "/home/user/.local/lib/python3.7/site-packages/keras/engine/training_utils.py", line 138, in standardize_input_data
    str(data_shape))
ValueError: Error when checking input: expected conv2d_1_input to have shape (28, 28, 1) but got array with shape (1, 28, 28)
回溯(最近一次呼叫最后一次):
文件“OCIR\u EMNIST\u v2.py”,第74行,在
history=model.fit(图像、标签、批次大小=64、epochs=int(输入(“输入epochs number.建议值为5.\t”)、10)、verbose=1、callbacks=callbacks\u列表)
文件“/home/user/.local/lib/python3.7/site-packages/keras/engine/training.py”,第952行,适合
批次大小=批次大小)
文件“/home/user/.local/lib/python3.7/site packages/keras/engine/training.py”,第751行,在用户数据中
异常(前缀为“输入”)
文件“/home/user/.local/lib/python3.7/site packages/keras/engine/training\u utils.py”,第138行,在标准化输入数据中
str(数据形状))
ValueError:检查输入时出错:预期conv2d_1_输入具有形状(28,28,1),但获得具有形状(1,28,28)的数组

错误很明显,它需要
(28,28,1)
图像,而您提供的是
(1,28,28)
图像。请看代码中的这两行:

images = images.reshape(-1, 28, 28, 1)
images = images.reshape(images.shape[0], 1, 28, 28)

这里的第一行是正确的,重塑为
(28,28,1)
,而第二行则相反,产生了错误。只需从代码中删除部分
images=images.reformate(images.shape[0],1,28,28)

您的错误消息不完整,请添加整个回溯。提供了整个回溯。回溯仍然相同,您没有添加新信息。回溯已经完成。否,回溯在末尾有一条异常消息,但在您的回溯中不存在。我说的是“我收到了这个错误信息:”下的回溯。请注意,没有这些信息,任何人都无法帮助您。这也会返回一个。它太大,无法在此处发布,但可以通过@Ben访问。在您的代码中,您对标签进行了两次热编码,只需要一次。