前言
- 有python知识基础,能够明白python语法情况
- 了解anaconda工具更顺畅
- 如果以上两点不太清楚,那么只能保证你能够运行出模型,不能保证你明白其中道理
anaconda下载与安装
- 推荐使用清华镜像,因为之后使用anaconda下载模块基于国内镜像效果更好
- 网址清华大学开源软件镜像站 | Tsinghua Open Source Mirror清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/
- 下载anaconda:(备注:哪个版本都可以)安装anaconda的好处:首先是安装anaconda后可以不用安装python,因为anaconda可以创建想要的python版本环境https://repo.anaconda.com/archive/Anaconda3-5.2.0-Windows-x86_64.exehttps://repo.anaconda.com/archive/Anaconda3-5.2.0-Windows-x86_64.exe
- 下载完后直接点击安装(然后一直下一步到选择路径)
- 自己选择安装路径(下一步小白就两个框都勾选,第一个框是配置anaconda环境,第二个安装anaconda默认的python3.6)
- 勾选两个
- 然后anaconda就安装完成了
anaconda的使用
- 如图选择Anaconda prompt
- 添加清华镜像网站(不添加也可以,这里我不详细说明添加了,可以找其他文章添加)
先输入命令:conda config --set show_channel_urls yes ,然后去anaconda安装的路径找到隐藏文件.condarc并且将下面的网址复制粘贴到隐藏文件.condarc,保存好就行了
注意:如果你的添加镜像源后不能用conda下载模块,那么就删除掉不用配置镜像源了,使用默认的
#添加下面
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
输入命令:conda config --show channels可查看是否安装成功
- 创建新环境,环境名为tensorflow,命令:conda create -n tensorflow python==3.6.4,这里我设置环境的python版本为3.6.4
- 最后会提示你使用命令conda activate tensorflow来激活刚刚创建的环境名为tensorflow的环境
- 输入conda activate tensorflow进行环境激活,
- 然后使用命令conda install tensorflow==1.14.0,下载tensorflow1.14.0版本,我的代码是tensorflow1.14.0,要注意tensorflow2版本和1版本区别很大的,输入y
- 到最后一步了,安装使用jupyter写代码训练,很容易忽略的步骤,安装anaconda的时候,jupyter是已经安装的,但是那个只是默认环境的jupyter
然后输入命令jupyter notebook就可以到浏览器写代码了
LeNet的代码
- 下载数据集,数据集网址如下
- 接下来是LeNet实现mnist手写识别完整代码
import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
#“/home/tensor/jupyter/MNIST_data/“改成你的数据集路径
mnist = input_data.read_data_sets("/home/tensor/jupyter/MNIST_data/",one_hot=True)
#确认是否能加载出来
print('训练集数量:',mnist.train.num_examples,
',验证集数量:',mnist.validation.num_examples,
',测试集数量:',mnist.test.num_examples)
#占位符
x=tf.placeholder(tf.float32,[None,784],name='X')
y=tf.placeholder(tf.float32,[None,10],name='Y')
#定义线性的斜率和截距变量
W=tf.Variable(tf.random_normal([784,10]),name='W')
b=tf.Variable(tf.zeros([10]),name='b')
#矩阵运算
forward=tf.matmul(x,W)+b
#创建模型
pred = tf.nn.softmax(forward)
#超参数
train_epochs = 100 #训练50次
batch_size = 100 #单次训练样本
total_batch = int(mnist.train.num_examples/batch_size) #一轮训练有多少批
display_step = 2 #显示粒度
learning_rate = 0.01 #学习率
#损失函数
loss_function = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred),reduction_indices=1))
#梯度下降优化器
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)
#匹配情况
correct_prediction = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
#准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))
sess = tf.Session()#创建会话
init = tf.global_variables_initializer()#初始化变量
sess.run(init)
#开始训练
for epoch in range(train_epochs):
for batch in range(total_batch):
xs,ys = mnist.train.next_batch(batch_size)#读取批次数据
sess.run(optimizer,feed_dict={x:xs,y:ys})#执行批次训练
loss,acc = sess.run([loss_function,accuracy],feed_dict={x:mnist.validation.images,y:mnist.validation.labels})
if (epoch+1) % display_step == 0:
print("Train Epoch:",'%02d' % (epoch+1),"Loss=","{:.9}".format(loss)," Accuracy=","{:.4f}".format(acc))
print("finished!")
#接下来是图形化测试模型输出结果对比
prediction_result = sess.run(tf.argmax(pred,1),feed_dict={x:mnist.test.images})
import matplotlib.pyplot as plt
import numpy as np
def plot_show_img_label(img,lab,pred,index,num=10):
fig = plt.gcf() #获取当前图表
fig.set_size_inches(10,12) #图片列表大小
if num > 25:
num = 25
for i in range(0,num):
ax = plt.subplot(5,5,i+1)
ax.imshow(np.reshape(img[index],(28,28)),cmap='binary') #显示图像
title = "label="+str(np.argmax(lab[index])) #构建图像标签值
if len(pred)>0:
title+=",pred="+str(pred[index])
ax.set_title(title,fontsize=10)
ax.set_xticks([]);
ax.set_yticks([])
index+=1
plt.show()
plot_show_img_label(mnist.test.images,mnist.test.labels,prediction_result,10,10)
得到的结果如下,其中可以看出第二行第四列预测错误,正确结果应该是3,模型结果是5