去年年底学习了深度学习的相关知识,但是寒假回来之后忘得也差不多了。。。为了巩固下所学知识,近期利用卷积神经网络做了一个小实例。卷积神经网络是一种多层神经网络,擅长处理图像特别是大图像的相关机器学习问题。卷积网络通过一系列方法,成功将数据量庞大的图像识别问题不断降维,最终使其能够被训练。为了测试卷积神经网络的性能,特地选择了猴子和狒狒这两种长得差不多的动物图片进行训练。
【step1:数据准备】
首先为了方便之后制作TFRecord数据集和训练,先在一个文件下建立两个文件夹"train" 和 "test":

然后分别进入这两个文件夹中,创建存放两种动物图片的文件夹"monkey"和"baboon":


现在文件夹中还是空的,没有现成的数据集,于是我通过百度爬虫获取了大约2000张猴子和狒狒的图片,爬虫脚本如下:
# -*- coding: utf-8 -*-
"""根据搜索词下载百度图片"""
import re
import sys
import urllib
import requests
keyWord = '狒狒'
savePath = 'E:/python/2019_02_24/train/baboon/'
def get_onepage_urls(onepageurl):
"""获取单个翻页的所有图片的urls+当前翻页的下一翻页的url"""
if not onepageurl:
print('已到最后一页, 结束')
return [], ''
try:
html = requests.get(onepageurl)
html.encoding = 'utf-8'
html = html.text
except Exception as e:
print(e)
pic_urls = []
fanye_url = ''
return pic_urls, fanye_url
pic_urls = re.findall('"objURL":"(.*?)",', html, re.S)
fanye_urls = re.findall(re.compile(r'<a href="(.*)" class="n">下一页</a>'), html, flags=0)
fanye_url = 'http://image.baidu.com' + fanye_urls[0] if fanye_urls else ''
return pic_urls, fanye_url
def down_pic(pic_urls):
"""给出图片链接列表, 下载所有图片"""
for i, pic_url in enumerate(pic_urls):
try:
pic = requests.get(pic_url, timeout=15)
string = savePath + str(i + 1) + '.jpg'
with open(string, 'wb') as f:
f.write(pic.content)
print('成功下载第%s张图片: %s' % (str(i + 1), str(pic_url)))
except Exception as e:
print('下载第%s张图片时失败: %s' % (str(i + 1), str(pic_url)))
print(e)
continue
if __name__ == '__main__':
keyword = keyWord # 关键词, 改为你想输入的词即可, 相当于在百度图片里搜索一样
url_init_first = 'http://image.baidu.com/search/flip?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&st=-1&fm=result&fr=&sf=1&fmq=1497491098685_R&pv=&ic=0&nc=1&z=&se=1&showtab=0&fb=0&width=&height=&face=0&istype=2&ie=utf-8&ctd=1497491098685%5E00_1519X735&word='
url_init = url_init_first + urllib.parse.quote(keyword, safe='/')
all_pic_urls = []
onepage_urls, fanye_url = get_onepage_urls(url_init)
all_pic_urls.extend(onepage_urls)
fanye_count = 0 # 累计翻页数
while True:
onepage_urls, fanye_url = get_onepage_urls(fanye_url)
fanye_count += 1
# print('第页' % str(fanye_count))
if fanye_url == '' and onepage_urls == []:
break
all_pic_urls.extend(onepage_urls)
down_pic(list(set(all_pic_urls)))
其中keyWord就是你想要搜索的关键词,savePath就是存放路径,运行脚本后,程序会自动从百度上自动下载该类图片到你设置的路径下。下载完毕后,将某些无法显示,或者无关的图片删除。最后为了方便,直接剪切小部分图片放入对应类别的test文件夹中。
【step2:制作TFRecord数据】
制作TFRecord数据的脚本网上有很多,大致都是差H NX\KJHZ[ NX\Bk.byH NY\XXJ
KJBH NX\\XXJJBXY N\\JKBH N[J]W^Y\
XYJH JKZ[JBH NX^JB NY\XXJ
KJB NX\\XXJJB N[J]W^Y\
KH KZ[JB NX^BNY\XXJ
KJBNX\\XXJJBN[J
N
] N\\JKJBW NX^Y\˙[WXY
]X]][NX^
Bk.by.9cB[H N]YX[JH
WJB[H NYXX[X^[W]]X[N]NJBiyki.h9` 9c%[\ N\XXJZ[XIN[BX[X\[]H NZ[^[X[XJ
[\LJBby/&9c%fjZ[\ NZ[Y[S[Z^\X[X\[]JKZ[[Z^J[K[\ N[\
BZ[\ NZ[Y[S[Z^\YKM
KZ[[Z^J[JBXYX[ N\]X[
\^
WJK\^
KJJBX\X NYXX[XYX[ BNNNo 9iyNNN N[
B[[\XX\[]X[^\
JBZ[\Y]YW[\N\BH[[ML
N[XYX[ N[XY]X[]JBX[ N^YJ\IN
VX[HH[
X[
BZ[\[YYXN[XYNX[Z[_K[N\BYH H NNZ[\X NX\X][
YYXN[XYNX[K[N\B[
\ YZ[[X\X YKZ[\XJB[XYX[ N[XY\X[\JBX[ N^YJ\IN
VX[B[
[\Y N\X\X YX\X][
YYXN[XYNX[K[N\JOOO[OH^Z[[L/ :)y#+g*9c 9nyl9kf9&I 9ioz)yZ[YW]al:/c9dnni9/o"zhnnny(yyg*:+y/"/h9n/&. 9/..9% !Lxc%bndnnd)b&yg*9 9d#/c9b9&y/h9bn.#y/&l$y(z`&+y."9(ygk+/aky."am9ioy% (yg#ycb,y. 9o 9i$y..+"9cb9aiyh%hnyd#c9.-y"y.ye b,9.yc/(yl:),9bni.ycyc9./*e /[X\"[OH^Z[[L 9d#$z+yo9(yg..XN[OH^Z[[L[Y[H\HHZYHNMHZZ[XZZ[[^][KM
KMMLYMX
KHL
[OH^Z[[Ln..M
Ik"y/cf..:`"y. 9`+ I+#(ygm.#y .+" 9."j9fa.#yo-9kd9d9eo*`"y.a.b!.#y./+d l#&yd9kd9ioy`+ 9- c%fayo9i&+&*/:+glydync [OH^Z[[Lodiyo"XN[OH^Z[[LKc9aiyi&`&`d9++i&.*.#yd#9i)9cm.:/c9cm/-9oy.g&. 9.kn"y. 9kn+bx[OH^Z[[L/X]\HX\9.*l9$z++...nc$
9!)odg9i)9 $y9nML9(I/.
a+y*9.[OH^Z[[Lg*9b-/g9l9kfX9l9kffa#)/fy&"oIkna"yn+bx[OH^Z[[Lb9i)kf9-l:a[OH^Z[[L.9i*yc"" c:/:+yn"y.*9nayn"y..#y`d#y+b:e (/)nz+!N[OH^Z[[L |