keras实现mnist数据分类——TypeError: 'int' object is not iterable

import sys, os
sys.path.append(os.pardir)
import matplotlib.pyplot as plt
from datasets.mnist import load_mnist
from tensorflow.python.keras import models
from tensorflow.python.keras import layers
from tensorflow.python.keras.utils import to_categorical
"""mnist数据集本身包含了6000张训练图片和1000张测试图片
   python3.6下的tensorflow包内有keras,故要从tensorflow内的python文件夹导入keras
   """


# --------------------------下载或者读入mnist数据集-----------------------------------------------------------------
# 第一次会花费几分钟,因为要下载minist数据集,需要接入网络。
# 第二次及以后的调用,只需要读入保存本地的文件(pickle文件即可)
(train_images, train_labels), (test_images, test_labels) = load_mnist(flatten=False, normalize=False)

# ------------------------网络构建------------------------------------------------------------
"""1、首先将训练数据输入到网络中
   2、网络学习将图像和标签关联在一起
   3、最后网络对test_images生成预测
   4、预测结果与test_labels对比"""
network = models.Sequential() # 定义顺序堆叠模型,keras通常采用sequential模型
network.add(layers.Dense(512, activation='relu', input_shape=(28*28))) # Dense(紧密的)全连接 这个"逗号"很关键
network.add(layers.Dense(10, activation='softmax'))
network.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy']) # metrics(度量)

# -----------------------准备标签--------------------------------------------------------------------
train_labels = to_categorical(train_labels) # categorical(分类)
test_labels = to_categorical(test_labels)

# -----------------------利用fit完成训练数据上的拟合(fit)--------------------------------------------
network.fit(train_images, train_labels, epochs=5, batch_size=128)

# ------------------------网络在test数据集上的测试----------------------------------------------------
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)

# ------------------------显示第4个数字-----------------------------------------------------------------
"""注意:
       mnist数据集中图像的存储形状为28*28的灰度图像——一维
       plt.imshow显示为二维图像,故需要将一维数组更改为二维数组
       而且要针对对应的那个图像进行形状更改
       """
print(train_images[4].shape)
train_images_4 = train_images[4].reshape(28, 28)
print(train_images_4.shape)

plt.imshow(train_images_4, cmap=plt.cm.binary) # cmap(color map)图像颜色
plt.show()

在这里插入图片描述
原因在于,input_shape输入格式错误

network.add(layers.Dense(512, activation='relu', input_shape=(28*28, )))

应该有一个逗号

完整代码:

import sys, os
sys.path.append(os.pardir)
import matplotlib.pyplot as plt
from datasets.mnist import load_mnist
from tensorflow.python.keras import models
from tensorflow.python.keras import layers
from tensorflow.python.keras.utils import to_categorical
"""mnist数据集本身包含了6000张训练图片和1000张测试图片
   python3.6下的tensorflow包内有keras,故要从tensorflow内的python文件夹导入keras
   """


# --------------------------下载或者读入mnist数据集-----------------------------------------------------------------
# 第一次会花费几分钟,因为要下载minist数据集,需要接入网络。
# 第二次及以后的调用,只需要读入保存本地的文件(pickle文件即可)
(train_images, train_labels), (test_images, test_labels) = load_mnist(flatten=False, normalize=False)

# ------------------------网络构建------------------------------------------------------------
"""1、首先将训练数据输入到网络中
   2、网络学习将图像和标签关联在一起
   3、最后网络对test_images生成预测
   4、预测结果与test_labels对比"""
network = models.Sequential() # 定义顺序堆叠模型,keras通常采用sequential模型
network.add(layers.Dense(512, activation='relu', input_shape=(28*28, ))) # Dense(紧密的)全连接 这个"逗号"很关键
# 28*28,即对输入数据进行了张量变形
network.add(layers.Dense(10, activation='softmax'))
network.compile(optimizer='Adam', loss='categorical_crossentropy', metrics=['accuracy']) # metrics(度量)

# -----------------------准备标签--------------------------------------------------------------------
train_labels = to_categorical(train_labels) # categorical(分类)
test_labels = to_categorical(test_labels)

# -----------------------利用fit完成训练数据上的拟合(fit)--------------------------------------------
network.fit(train_images, train_labels, epochs=5, batch_size=128)

# ------------------------网络在test数据集上的测试----------------------------------------------------
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)

# ------------------------显示第4个数字-----------------------------------------------------------------
"""注意:
       mnist数据集中图像的存储形状为28*28的灰度图像——一维
       plt.imshow显示为二维图像,故需要将一维数组更改为二维数组
       而且要针对对应的那个图像进行形状更改
       """
print(train_images[4].shape)
train_images_4 = train_images[4].reshape(28, 28)
print(train_images_4.shape)

plt.imshow(train_images_4, cmap=plt.cm.binary) # cmap(color map)图像颜色
plt.show()

# ------------------------张量切片的操作-------------------------------------------------------
my_slice = train_images[10:100]
my_slice_2 = train_images[:, 14:, 14:] # 裁剪出所有图像又下角14*14的区域
print(my_slice.shape)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值