深度学习 入门与实践 (数据集及代码实现)


前言

(1)非计算机专业的小可爱,最近在学习《深度学习 入门与实践》这本书,感受:对新手来讲是比较友好的入门级教材。
(2)书中给的数据集和代码下载的链接失效了,就自己整理了一部分呐~

一、书中所讲的实例

1.pybrain实现手写数字识别P65

(1)数据集下载:

https://code.google.com/archive/p/supplement-of-the-mnist-database-of-handwritten-digits/downloads
下面是我根据书中要求整理好的数据集:

(2)python安装pybrain

根据博客:
https://blog.csdn.net/xrinosvip/article/details/105916857

(3)书中所写代码

代码1如下(示例):

from PIL import Image
import numpy as np
import os
from pybrain.tools.shortcuts import buildNetwork
from pybrain.datasets import SupervisedDataSet
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.tools.customxml.networkwriter import NetworkWriter

net=buildNetwork(784,30,10,bias=True)
ds=SupervisedDataSet(784,10)

for i in range(0,3):# 0-910个文件夹
    for f in os.listdir('D:\\ucas_homework\\deep_learning\\t10k-images\\% s'% i):#每个文件夹里的图片
        if f.endswith('.bmp'):
            print(f)
            im=Image.open('D:\\ucas_homework\\deep_learning\\t10k-images\\% s\\% s'%(i,f))
            mtr=np.array(im)
            s=mtr.reshape(1,784)
            for j in range(0,784):#图像二值化
                if s[0][j]!=0:
                    s[0][j]=1
            c=[0,0,0,0,0,0,0,0,0,0]
            c[i]=1
            ds.addSample(s[0],c)
            print(mtr);
print('end of folder %s' % i)

trainer=BackpropTrainer(net,ds)
trainer.trainUntilConvergence()
NetworkWriter.writeToFile(net,'Model.xml')#考察整个测试集的正确率,可将训练好的模型加入到model.xml文件中。通过model.xml可以测试全部测试集的正确率
print("training end")

print("first begin test 0_977.bmp")
im=Image.open('D:\\ucas_homework\\deep_learning\\t10k-images\\0\\0_977.bmp')
mtr=np.array(im)
s=mtr.reshape(1,784)
for j in range(0,784):# 图像二值化
    if s[0][j]!=0:
        s[0][j]=1
prediction=net.activate(s[0])
print("output is"+str(prediction)+"end test 0_977.bmp")

print("second begin test 1_1108.bmp")
im1=Image.open('D:\\ucas_homework\\deep_learning\\t10k-images\\1\\1_1108.bmp')
mtr1=np.array(im1)
s1=mtr1.reshape(1,784)
for j in range(0,784): #图像二值化
    if s1[0][j]!=0:
        s1[0][j]=1
prediction1=net.activate(s1[0])
print("output is "+str(prediction1)+"end test 1_1108.bmp")

print("third begin test 2_1026.bmp")
im2=Image.open('D:\\ucas_homework\\deep_learning\\t10k-images\\2\\2_1026.bmp')
mtr2=np.array(im2)
s2=mtr2.reshape(1,784)
for j in range(0,784): #图像二值化
    if s2[0][j]!=0:
        s2[0][j]=1
prediction1=net.activate(s2[0])
print("output is "+str(prediction1)+"end test 2_1026.bmp")

代码2如下(示例):

from PIL import Image
import numpy as np
import os
from pybrain.tools.customxml.networkreader import NetworkReader


newnet=NetworkReader.readFrom('Model.xml')
print("start load model")
for i in range(0,3):
    right=0
    filecount=0
    for f in os.listdir('D:\\ucas_homework\\deep_learning\\t10k-images\\% s'% i):
        if f.endswith('.bmp'):
            filecount+=1
            im=Image.open('D:\\ucas_homework\\deep_learning\\t10k-images\\% s\\% s'%(i,f))
            mtr=np.array(im)
            s=mtr.reshape(1,784)
            for j in range(0,784):
                if s[0][j]!=0:
                    s[0][j]=1
            prediction=newnet.activate(s[0])
            if prediction.argmax()==i:
                right+=1
            rate=float(right)/filecount
print("the testing number is "+str(i)+":"+str(filecount)+"image are tested,"+str(right)+"images are right,"+"the accuracy is"+str(rate))

(4)手写数字识别二维可视化展示

一个有趣的网站(书里有网址的相关介绍哦~):https://www.cs.ryerson.ca/~aharley/vis/conv/flat.html

2.Tensorflow实现线性回归P150

(1)数据集下载

(2)python3.6安装tensorflow1.15.0

a.安装tensorflow1.15.0

根据博客:
使用Anaconda3 5.2.0安装tensorflow
https://blog.csdn.net/dongcjava/article/details/109524981
在pycharm中使用刚才安装好的tensorflow:
https://blog.csdn.net/dream_summer/article/details/107394039
注意:
⭐1.本书用的是tensorflow1.0版,如果安装tensorflow2.0,后续实例运行自然会出错啦。
下面是一个介绍tensorflow1.0和tensorflow2.0区别的博客咯:
https://blog.csdn.net/zhouchen1998/article/details/101108777#:~:text=TensorFl,%EF%BC%89%E6%96%B9%E9%9D%A2%E5%A4%87%E5%8F%97%E5%A5%BD%E8%AF%84%E3%80%82

⭐2.下载同上篇博文里一样版本的Anaconda(Anaconda3 5.2.0),应该会默认配置python3.6(就我的理解,tensorflow对python3.6兼容好一点吧,应该是不会出错的哦~)
⭐3. 在安装tensorflow的时候注意版本问题,根据这本书,选择tensorflow1.15.0是应该没问题的。(就是修改下面那行代码啦~)

pip install tensorflow-cpu==1.15.0 -i  https://pypi.mirrors.ustc.edu.cn/simple  

(3)书中所写代码

代码如下(示例):

import tensorflow as tf
#加下面这行命令是因为一个warning,具体参考这个博客:https://blog.csdn.net/jemary_/article/details/104197308
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)

from scipy import stats
import matplotlib.pyplot as pyplot

#之所以加下面两行命令,是因为一些报错问题,具体参考这个博客解决:https://blog.csdn.net/hq86937375/article/details/79696023
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'

#这本书给定的tensorflow是1.0版本,因此如果安装的是tensorflow2,可能不适用。
data=[]
for l in open('D:\\ucas_homework\\deep_learning\\deep_learning_python\\height.txt'):
    row=[float(x) for x in l.split()]
    if len(row)>0:
        data.append(row)
x_data=[l[0] for l in data]
y_data=[l[1] for l in data]

pyplot.plot(x_data,y_data,'bo',label='height data')
pyplot.legend()
pyplot.show()

w=tf.Variable(-1.0,name="weights")
b=tf.Variable(75.4,name="bias")
y=w*x_data+b

loss=tf.reduce_mean(tf.square(y-y_data))
optimizer=tf.train.GradientDescentOptimizer(0.00001)

train=optimizer.minimize(loss)

init=tf.global_variables_initializer()

sess=tf.Session()
sess.run(init)

for step in range(1000):
#如果你用的是python2,就用 for step in xrange(1000):
    sess.run(train)
    print(step,sess.run(w),sess.run(b),sess.run(loss))


3.Tensorflow实现手写数字识别P150

(1)数据集下载

和上面mnist数据集下载的地方一样啦,当然,下面给出我根据书中内容整理好的数据集:

(2)书中所写代码

代码如下(示例):

import tensorflow as tf
#加下面这行命令是因为一个warning,具体参考这个博客:https://blog.csdn.net/jemary_/article/details/104197308
tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR)
import numpy as np
import os
#之所以加下面一行命令,是因为一些报错问题,具体参考这个博客解决:https://blog.csdn.net/hq86937375/article/details/79696023
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
from PIL import Image


#加载测试集数据
x_data_train=[]
y_label_train=[]
for i in range(0,10):# 数字0-910个文件夹
    for f in os.listdir('D:/ucas_homework/deep_learning/t10k-images/training_set/%s'%i):#每个文件夹里的图片
        if f.endswith('.bmp'):
            im=Image.open('D:/ucas_homework/deep_learning/t10k-images/training_set/% s/% s'%(i,f))
            mtr=np.array(im)
            s=mtr.reshape(1,784)
            for j in range(0,784):#图像二值化
                if s[0][j]!=0:
                    s[0][j]=1
            c=[0,0,0,0,0,0,0,0,0,0]
            c[i]=1
            x_data_train.append(s[0])
            y_label_train.append(c)
    print("end of training folder %s" % i)

x_data_test=[]
x_data_num=[]

#读入测试数据
for i in range(0,10):#数字0-910个文件夹
    count=0
    for f in os.listdir('D:\\ucas_homework\\deep_learning\\t10k-images\\testing_set/%s'%i):
        if f.endswith('.bmp'):
            im=Image.open('D:\\ucas_homework\\deep_learning\\t10k-images\\testing_set/%s/%s'%(i,f))
            mtr=np.array(im)
            s=mtr.reshape(1,784)
            for j in range(0,784):
                if s[0][j]!=0:
                    s[0][j]=1
            x_data_test.append(s[0])
            count+=1
    x_data_num.append(count)
    print('end of testing folder % s'% i)

#定义神经网络层
def Layer(input,inSize,outSize,phi=None):
    with tf.name_scope('layer'):
        with tf.name_scope('weight'):
            w=tf.Variable(tf.random_normal([inSize,outSize]))
        with tf.name_scope('basis'):
            b=tf.Variable(tf.zeros([1,outSize])+0.1)
        with tf.name_scope('z'):
            z=tf.matmul(input,w)+b
            if phi is None:
                output=z
            else:
                output=phi(z)
    return output

x_data_train=np.array(x_data_train)
y_label_train=np.array(y_label_train)
x_data_test=np.array(x_data_test)

with tf.name_scope('inputs'):
    xs=tf.placeholder(tf.float32,[None,784])
    ys=tf.placeholder(tf.float32,[None,10])

l1=Layer(xs,784,30,phi=tf.nn.relu)
l2=Layer(l1,30,10,phi=None)

with tf.name_scope('loss'):
    loss=tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=l2,labels=ys)) # 进行了报错修改,参考博客:https://www.cnblogs.com/bob-coder/p/11750871.html
with tf.name_scope('train'):
    train=tf.train.GradientDescentOptimizer(0.5).minimize(loss)

init=tf.global_variables_initializer()
sess=tf.Session()
sess.run(init)

for i in range(20000):
    sess.run(train,feed_dict={xs:x_data_train,ys:y_label_train})
    print('step %s'% i,'loss is ',sess.run(loss,feed_dict={xs:x_data_train,ys:y_label_train}))

writer=tf.train.SummaryWriter('logs/',sess.graph)

x_test=x_data_test[0:4,:]
np.set_printoptions(threshold='nan')
result=sess.run(12,feed_dict={xs:x_test})
print('character 0 testing output :')
print(result)

flag=0
for i in range(10):
    num=x_data_num[i]
    x_test=x_data_test[flag:(flag+num),:]
    result=sess.run(l2,feed_dict={xs:x_test})
    corr_num=0
    for j in range(num):
        if np.argmax(result[j])==i:
            corr_num+=1
    rate=float(corr_num)/float(num)
    print('character %s has %s,testing images,correct number is %s,accuracy is %s'%(i,num,corr_num,rate))
    flag+=num



总结

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值