赞
踩
第1步:打开Anaconda的命令窗口,即Anaconda Prompt
第2步:使用命令创建指定版本的python环境(这里以py36命令环境名称举例)
- Pycharm 2022.1.4
- conda version : 4.5.4
- python version : 3.6.5.final.0
- platform : win-64
Anaconda是一个开源的Python发行版本,用来管理Python相关的包,使用anaconda可以很方便的切换到不同的python环境,使用不同的深度学习框架来开发项目,非常高效!
具体下载与安装步骤,请参照这位大佬的文章
Anaconda安装成功后会附带,在开始栏处
conda create -n py36 python=3.6
默认环境是base,我们需要创建一个指定版本的环境供我们使用,可以理解为开发一个项目所需要创建的指定环境,这样不同项目之间环境是相互隔离开的 。使用命令activate +环境名即可实现环境的切换。
activate py36
切换到py36环境后,输入conda info 命令,出现如下信息即表面环境创建成功!
在成功切换到py36(自己创建的环境)之后,依次在Anaconda Prompt中执行下面的命令来下载所需工具包,注意:由于默认下载源在国外,所以下载速度会很慢,我们可以使用国内的一些镜像来下载,速度很快。只需要在下面每一个命令后面加上 -i 镜像地址 即可。
我使用的是清华大学的镜像源: -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install matplolib -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install scipy -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install keras==2.1.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
- pip install tensorflow==1.14.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
点击Pycharm右下角Add Interpreter
如下图所示,选择Anaconda安装目录下 Scripts文件夹下的conda.exe
(有些也会出现在根目录下,选择根目录下的conda.exe也行,根据Pycharm不同版本会有区别)
Pycharm切换解释器之后,至此,环境准备工作完成了
train_cnn.py
- #步骤01 入所需要的模块
- from keras.datasets import mnist
- from keras.utils import np_utils
- from keras.models import Sequential
- from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
- import numpy as np
- np.random.seed(10)
-
- #步骤02 下载mnist数据集、读取数据集
- (x_Train, y_Train) , (x_Test, y_Test) = mnist.load_data()
-
- #步骤03 将图像特征值转化为6000,28,28,1的4维矩阵
- x_Train4D = x_Train.reshape(x_Train.shape[0], 28, 28,1).astype('float32')
- x_Test4D = x_Test.reshape(x_Test.shape[0], 28, 28, 1).astype('float32')
-
- #步骤04 进行标准化
- #将像素范围设置在【0,1】
- x_Train4D_normalize = x_Train4D / 255
- x_Test4D_normalize = x_Test4D / 255
-
- #步骤05 label进行一位有效编码转换
- #将标签转成读热码
- y_TrainHot = np_utils.to_categorical(y_Train)
- y_TestHot = np_utils.to_categorical(y_Test)
-
- #=>建立模型
- #步骤01 定义模型
- model = Sequential()
-
- #步骤02 建立卷积层1
- model.add(Conv2D(filters=16, # filter = 16 建立16个滤镜
- # kernel_size = (5,5) 每一个滤镜是5 × 5的大小
- kernel_size=(5,5),
- # padding = 'same' 设置卷积运算产生的图像大小不变
- padding='same',
- #输入的图像形状为28*28,1代表单色灰度,3代表RGB
- input_shape= (28, 28, 1),
- # activation设置激活函数为relu建立池化层1
- activation='relu'))
-
- #步骤03 建立池化层1
- model.add(MaxPooling2D(pool_size=(2,2)))#缩减采样,输出16个14*14图像
-
- #步骤04建立卷积层2
- model.add(Conv2D(filters=36,#建立36个滤镜
- kernel_size=(5,5),#每一个滤镜是5 × 5的大小
- padding='same',#Convolution完成后的图像大小不变
- activation='relu'#输出36个14*14的图像
- ))
-
- #步骤05 建立池化层2,加入Dropout避免Overfitting
- model.add(MaxPooling2D(pool_size=(2,2)))#图像大小变为7*7
- # 加入DropOut(0.25),每次训练时,会在神经网络中随机放弃25%的神经元,避免过拟合建立神经网络(平坦层,隐藏层,输出层)建立平坦层
- model.add(Dropout(0.25))
-
- #步骤06 建立平坦层
- model.add(Flatten())#长度是36*7*7个神经元
-
- #步骤07 建立隐藏层
- model.add(Dense(128, activation='relu'))
- # 把DropOut加入模型中,DropOut(0.5)在每次迭代时候会随机放弃50%的神经元,避免过拟合
- model.add(Dropout(0.5))
- # 建立输出层,一共10个单元,对应0-9一共10个数字。使用softmax进行激活
- model.add(Dense(10, activation='softmax'))
- # 查看模型摘要
- print(model.summary())
-
- #=>进行训练
- #步骤01 定义训练方式
- # 定义训练方式compile
- model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
-
- #步骤02 开始训练
- train_history = model.fit(x = x_Train4D_normalize, y = y_TrainHot,
- validation_split=0.2,
- #将80%作为训练数据,20%作为测试数据
- epochs=10,#执行10个训练周期
- batch_size=300,#每一批300项数据
- verbose=2#参数为2表示显示训练过程
- )
train_cnn_model.py
- from keras.datasets import mnist
- from keras.utils import np_utils
- import numpy as np
- np.random.seed(10)
-
- (x_Train, y_Train) , (x_Test, y_Test) = mnist.load_data()
-
- x_Train4D = x_Train.reshape(x_Train.shape[0], 28, 28,1).astype('float32')
- x_Test4D = x_Test.reshape(x_Test.shape[0], 28, 28, 1).astype('float32')
-
- x_Train4D_normalize = x_Train4D / 255
- x_Test4D_normalize = x_Test4D / 255
- y_TrainHot = np_utils.to_categorical(y_Train)
- y_TestHot = np_utils.to_categorical(y_Test)
-
- from keras.models import Sequential
- from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
-
- model = Sequential()
- model.add(Conv2D(filters=16, kernel_size=(5,5), padding='same', input_shape = (28, 28, 1), activation='relu'))
- # 参数说明
- # filter = 16 建立16个滤镜
- # kernel_size = (5,5) 每一个滤镜是5 × 5的大小
- # padding = 'same' 设置卷积运算产生的图像大小不变
- # input_shape = (28, 28, 1) 第一二维代表输入图像的形状是28 × 28,第三维因为是单色灰度图像,所以最后维数值是1
- # activation设置激活函数为relu建立池化层1
- model.add(MaxPooling2D(pool_size=(2,2)))
- # 输入参数为pool_size=(2,2),执行第一次缩减采样,将16个28 ×28的图像缩小为16个14 × 14的图像建立卷积层2,将16个图像转化为36个图像,不改变图像大小,仍为14 × 14
- model.add(Conv2D(filters=36, kernel_size=(5,5), padding='same', activation='relu'))
- # 加入池化层2,并加入DropOut避免过拟合
- model.add(MaxPooling2D(pool_size=(2,2)))
- # 执行第二次缩减采样,将14 × 14图像转换为7 × 7图像
- model.add(Dropout(0.25))
- # 加入DropOut(0.25),每次训练时,会在神经网络中随机放弃25%的神经元,避免过拟合建立神经网络(平坦层,隐藏层,输出层)建立平坦层
- model.add(Flatten())
- # 将之前步骤建立的池化层2,一共有36个7 × 7的图像转化为一维向量,长度是36 × 7 × 7 = 1764, 也就是1764个float数,对应1764个神经元建立隐藏层,一共128个神经元
- model.add(Dense(128, activation='relu'))
- # 把DropOut加入模型中,DropOut(0.5)在每次迭代时候会随机放弃50%的神经元,避免过拟合
- model.add(Dropout(0.5))
- # 建立输出层,一共10个单元,对应0-9一共10个数字。使用softmax进行激活
- model.add(Dense(10, activation='softmax'))
- # 查看模型摘要
- print(model.summary())
- # # 进行训练
- # 定义训练方式
-
- # # 加载之前训练的模型
- try:
- # model.load_weights("SaveModel/minist_model.h5")
- model.load_weights("SaveModel/minist_model_graphic.h5")
- print("加载模型成功!继续训练模型")
- except :
- print("加载模型失败!开始训练一个新模型")
-
- model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
-
- # 开始训练
- train_history = model.fit(x = x_Train4D_normalize, y = y_TrainHot,
- validation_split=0.2, epochs=10, batch_size=300, verbose=2)
-
- # model.save_weights("SaveModel/minist_model.h5")
- model.save("SaveModel/minist_model_graphic.h5")
-
- print("Saved model to disk")
predict_one_img.py
- import cv2
- from keras.models import load_model
-
- img = cv2.imread("./pic/6.jpg")
- print(img.shape)
- grey_img = img[:,:,0:1]
- print(grey_img.shape)
- shape_img= (grey_img.reshape(1, 28, 28, 1)).astype('float32')/255
-
- # model = load_model('SaveModel/minist_model.h5') #选取自己的.h模型名称
- model = load_model('SaveModel/minist_model_graphic.h5') #选取自己的.h模型名称
- prediction = model.predict_classes(shape_img)
- print('该手写数字图像为:'+'%d'%prediction[0])
-
采用的数据集是MNIST数据集。在该数据集中每张图片由28x28个像素点构成,每个像素点用一个灰度值表示。如下是数字1的一个例子,我们的目的是做出一个模型,将这784个数值输入这个模型,然后它的输出结果就为1。
本次通过基于Keras手写数字图像识别这一经典案例,初步学习了机器学习中另一个重要的分支领域——深度学习的内容,采用的数据集是MNIST数据集。在该数据集中每张图片由28x28个像素点构成,每个像素点用一个灰度值表示。首先是要使用pip命令行下载程序所要导入的工具包,同时使用activate py36 指令将python环境切换到我们创建并导入相关工具包的环境下,编译器采用pycharm,将程序跑起来。首先要进行数据集的训练,然后再用训练好的模型去识别6.jpg这个手写数字图像,控制台打印出识别的结果。
经过这个入门案例的学习,让我对机器学习领域产生了浓厚的学习兴趣,本质上是用海量的数据作为输入,让计算机去训练分析出一个模型,我们可以将其视为一个函数,一个“黑盒子”,然后用它去识别指定的数据,给出分析的结果,该过程类比于人脑总结以往经验,来预测未来指导行动的过程是异曲同工的,非常奇妙!!
深度学习实例——Keras实现手写数字识别https://blog.csdn.net/yjw123456/article/details/103811112?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168594730916800222827149%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168594730916800222827149&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-103811112-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=Keras%E6%89%8B%E5%86%99%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB&spm=1018.2226.3001.4187【深度学习实战—1】:基于Keras的手写数字识别(非常详细、代码开源)https://blog.csdn.net/qq_42856191/article/details/121420268?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168594730916800222827149%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168594730916800222827149&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-121420268-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=Keras%E6%89%8B%E5%86%99%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E8%AF%86%E5%88%AB&spm=1018.2226.3001.4187
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。