深度学习卷积神经网络,tensorflow1.x版本从入门安装环境到模型代码运行,tensorflow1.x用LeNet实现手写数字识别

前言

  1. 有python知识基础,能够明白python语法情况
  2. 了解anaconda工具更顺畅
  3. 如果以上两点不太清楚,那么只能保证你能够运行出模型,不能保证你明白其中道理

anaconda下载与安装

  1. 推荐使用清华镜像,因为之后使用anaconda下载模块基于国内镜像效果更好
  2. 网址清华大学开源软件镜像站 | Tsinghua Open Source Mirror清华大学开源软件镜像站,致力于为国内和校内用户提供高质量的开源软件镜像、Linux 镜像源服务,帮助用户更方便地获取开源软件。本镜像站由清华大学 TUNA 协会负责运行维护。https://mirrors.tuna.tsinghua.edu.cn/
  3. 下载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
  4. 下载完后直接点击安装(然后一直下一步到选择路径)

        

  1. 自己选择安装路径(下一步小白就两个框都勾选,第一个框是配置anaconda环境,第二个安装anaconda默认的python3.6)

        

  1. 勾选两个

        

  1. 然后anaconda就安装完成了

anaconda的使用

  1. 如图选择Anaconda prompt

  1. 添加清华镜像网站(不添加也可以,这里我不详细说明添加了,可以找其他文章添加)

        先输入命令: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可查看是否安装成功

  1. 创建新环境,环境名为tensorflow,命令:conda create -n tensorflow python==3.6.4,这里我设置环境的python版本为3.6.4
  2. 最后会提示你使用命令conda activate tensorflow来激活刚刚创建的环境名为tensorflow的环境

  1. 输入conda activate tensorflow进行环境激活,
  2. 然后使用命令conda install tensorflow==1.14.0,下载tensorflow1.14.0版本,我的代码是tensorflow1.14.0,要注意tensorflow2版本和1版本区别很大的,输入y

 

  1. 到最后一步了,安装使用jupyter写代码训练,很容易忽略的步骤,安装anaconda的时候,jupyter是已经安装的,但是那个只是默认环境的jupyter

 

 然后输入命令jupyter notebook就可以到浏览器写代码了

LeNet的代码

  1. 下载数据集,数据集网址如下

MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burgeshttp://yann.lecun.com/exdb/mnist/

  1. 接下来是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

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓小邰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值