- 实验内容
1.软件安装与环境配置 安装python软件来进行手写数字识别。在实验开始先成功安装python,ANACONDA以及pycharm软件。
2.深度学习框架搭建 ➢ 在进行深度学习代码运行前,首先需要完成虚拟环境的搭建和相关包的安装 ➢ 打开Anaconda Prompt ➢ 输入命令:conda create -n keras_mnist python=3.10,创建名为keras_mnist的虚拟环境,创建环境时可以指定python版本,由于我的电脑python版本为3.10,因而这里指定版本为3.10 ➢ 接着激活环境:conda activate keras_mnist ➢ 此时上图中的(base)变成了(keras_mnist),表示成功激活环境keras_mnist ➢ 然后在此环境下输入pip install tensorflow安装tensorflow ➢ 安装时可以指定tensorflow版本,这里指定的版本为2.11.0
深度学习框架搭建遇到的问题:在安装tensorflow的过程中,由于网络连接问题导致下载速度过慢, 可在网络查找链接自行进行镜像下载。
Conda list 列表界面
➢ 打开PyCharm,点击File→New Project ➢ 选择项目的路径,并对新建的项目进 行命名,示例中项目命名为 Exp1_HandWriting ➢ New environment using→Conda ➢ 最后点击Create进行创建
➢ File→New→Python File,命名为:keras_mnist ➢ 在keras_mnist.py文件里输入卷积神经网络构建和训练的代码 ➢ 完成代码编辑后,点击鼠标右键,然后选择“Run keras_mnist”运行代码
➢ File→Settings→Python Interpreter→Add→Conda Environment ➢ 找到刚才配置的keras_mnist虚拟环境下的python.exe ➢ 点击ok完成虚拟环境的配置
选择虚拟环境遇到的问题:在选择Conda Environment时, 选择配置的keras_mnist虚拟环境下的python.exe会出现报错,经过搜索,改为选择conda.exe则可顺利进行下一步。
项目环境配置
3.代码的运行
➢ MNIST手写数字数据集来源于是美国国家标准与技术研究所,是著名的公开数 据集之一 ➢ MNIST手写数字数据集包含有60000张图片作为训练集数据,由250个不同职业 的人纯手写绘制 ➢ 其中10000张图片作为测试集数据,且每一个训练元素都是28×28像素的手写 数字图片,每一张图片代表的是从0到9中的每个数字。 ➢ 在keras中内置了MNIST数据集,我们只需导入相关库并使用代码 mnist.load_data()即可下载MNIST数据集
运行tensorflow代码出现的问题:在运行代码时,程序出现了报错。原因是安装的tensorflow版本为2.11版本,与代码不适配。将工具库导入的代码改为下图可正常运行
from keras.datasets import mnist
from tensorflow.python.keras.layers import Dense,Flatten,Conv2D
from tensorflow.python.keras.losses import sparse_categorical_crossentropy
from tensorflow.python.keras.optimizers import adam_v2
from tensorflow.python.keras.models import Sequential,save_model
- 运行结果
运行结果如下:
模型训练的准确率为98.08%
调节模型的训练参数,将batch_size改为800,将no_epoch改为5,模型的训练输出结果发生改变。训练时间明显延长了。训练结果大致相似,准确率仍然很高,提升至99.51%。
- 总结分析
经过这次实验,我学会了用python,ANACONDA,Pycharm进行项目创建的基本操作。学会了配置环境的基本操作。了解了tensorflow工具包的强大功能和数字识别的基本流程。
实验的感想:在实验过程中遇到了很多报错,做实验的大部分时间都在解决这些报错。包括环境配置的错误,代码运行时工具库调用的错误以及代码中存在的语法错误。由于编程实践的经验较少,往往在写程序的过程中我个人遇到报错不愿意自主的解决,经过这次实践,我更加切身感受到了编程实践过程中自己解决报错需要很大的耐心,也需要有信心。希望能在之后的编程实践中得到更多的锻炼。
- 附录(源程序)
from keras.datasets import mnist
from tensorflow.python.keras.layers import Dense,Flatten,Conv2D
from tensorflow.python.keras.losses import sparse_categorical_crossentropy
from tensorflow.python.keras.optimizers import adam_v2
from tensorflow.python.keras.models import Sequential,save_model
# Load MNIST dataset u
(input_train,target_train),(input_test,target_test) = mnist.load_data()
# Definition of model parameters
batch_size = 600
img_width,img_height = 28,28
loss_function = sparse_categorical_crossentropy
no_classes = 10
no_epochs = 1
optimizer = adam_v2.Adam()
validation_split = 0.2
verbosity = 1
# Reshape data
input_train = input_train.reshape((input_train.shape[0],img_width,img_height,1))
input_test = input_test.reshape((input_test.shape[0],img_width,img_height,))
input_shape = (img_width,img_height,1)
# cast input to float32
input_train = input_train.astype( 'float32')
input_test = input_test.astype( 'float32')
#Normalize data
input_train = input_train / 255
input_test = input_test / 255
# Define the model c
model = Sequential()
model.add(Conv2D(32,kernel_size=(3,3),activation='relu', input_shape=input_shape))
model.add(Conv2D(64,kernel_size=(3,3),activation='relu'))
model.add(Conv2D(128, kernel_size=(3,3),activation='relu'))
model.add(Flatten())
model.add(Dense(256,activation='relu'))
model.add(Dense(no_classes,activation='softmax'))
model.compile( loss=loss_function,optimizer=optimizer,metrics=[ 'accuracy'])
model.fit(input_train,target_train,
batch_size=batch_size,epochs=no_epochs,
verbose=verbosity,
validation_split=validation_split)
#Evaluate the model
scores = model.evaluate(input_train,target_train,verbose=0)
print("%s:%.2f%%" %(model.metrics_names[1], scores[1]*100))