机器学习笔记入门 (六)训练自己的数据

碰到的一些背景知识的记录:

tf.placeholder函数说明

tf.Variable()
简而言之,tf.Variable()函数会生成一个对象,这个对象包含key和value两个内容。

tf.pow
这个链接里的代码要仔细看,感觉弯弯绕绕很多

tf.reduce_sum
又一个弯弯绕

tf.train中的Optimizer相关的函数与功能介绍
大概了解

sess.run(tf.global_variables_initializer()) 做了什么?

循环

理解Tensorflow的shape

[tf.nn.softmax_cross_entropy_with_logits]

one-hot

tf.reshape(x,shape)
x为输入,shape为转后的形式。

比如 tf.reshape(x, [-1,28,28,1]),意思就是将1D向量转为2D的图片格式,即从1 * 784转化为原始的28*28的结构。同时由于只有一个颜色通道,故最终尺寸为[-1, 28, 28, 1],前面的-1代表样本数量不固定,最后一个1代表颜色通道数量。

name/variable_scope 的作用


训练自己的数据

训练自己的数据,一方面是希望通过这个能理解项目中整个的开发流程是如何的,大概是干些什么事情,另一方面也从实际操作来巩固先前所学的一些知识和概念。

  • 环境的配置,这一步其实还蛮关键的,报了很多错。
  1. 我是windows环境,python安装最新的就行了,我用的3.7.3,就一个python-3.7.3-amd64.exe安装包,一路点击下一步,就遇到环境变量的时候可以让它自动加就行了。
  2. Tensorflow ,因为pip是安装python的时候自动安装的所以可以直接用,包括环境变量也加上了。直接在cmd里执行 pip install tensorflow ,也不用管版本安装最新的就行了(我用的是cpu版本的)。
  3. Tensorflow的模型,它的作用是实现了很多功能,包括物体检测,它有现成的很优秀的模型,但是需要去github下载,它的名字叫models,直接下载就可以了,最关键的是,把它下载下来之后放到什么地方很多人没有提甚至都说错了。我这里下载后会看到models-master这样一个压缩包400多M,解压,然后把解压后的文件夹models-master名称改成models,接下来将其拷贝到python安装目录下,TensorFlow库下的路径里,即我的就是 E:\Python3\Lib\site-packages\tensorflow\models,因为上面第二步安装TensorFlow的时候使用pip安装,因此TensorFlow会出现在python的库路径下 Lib\site-packages,而models需要放在TensorFlow下面,因为它里面的代码很多都会用到TensorFlow。
  4. Protobuf,之所以要安装它是因为后面会需要对上一步的models进行一些操作,这个后面会说。下载地址是这里。下载下来是一个压缩包:protoc-3.8.0-win64.zip,直接解压随便哪个目录都可以,因为它只是在这个过程中充当一个工具的角色,没有与其他任何模块产生联系。
  5. 安装一些库,包括pillow,matplotlib。其实后面在编译的时候如果没有安装一些需要的库会报错,一样也可以在那时安装,安装方法都是pip install xxx 。这里说的编译,是指后面会对models的object_detection编译。

  • 我们的目的是训练自己的数据,具体一点说就是要让自己的模型能够识别图片中人的脸。最终的效果是希望能够给模型喂这样一张图片:
    在这里插入图片描述
    然后模型能识别出来这个图片中的脸是娜扎的还是刘诗诗的,这里本来可以做很多个人,但简单来做,就两个分类,一个是娜扎一个是刘诗诗。不光能识别图片中的脸属于谁,同时还可以把脸框出来:
    在这里插入图片描述
  1. 第一步首先是准备这些明星脸的图片数据,按道理来说,图片越多肯定越好,但图片越多也就意味着对这张图片打标签就会越多,打标签这个活不是个讨喜的活,因为目前来看只能手打,具体后面会说。这里首先要准备图片,我参考的是一篇博客,但不建议完全参照看这篇,因为这篇博客里面好多东西都没有说,讲解步骤跨度太大。准备图片需要用到网络爬虫,也就是爬数据,我在pycharm新建的test工程根目录执行的,代码名称随意,代码如下:
import requests
import re
import os
from pypinyin import pinyin, lazy_pinyin

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        print("")

def getPageUrls(text, name):
    re_pageUrl = r'href="(.+)">\s*<img src="(.+)" alt="' + name
    return re.findall(re_pageUrl, text)

def downPictures(text, root, name):
    pageUrls = getPageUrls(text, name)
    titles = re.findall(r'alt="' + name + r'(.+)" ', text)
    for i in range(len(pageUrls)):
        pageUrl = pageUrls[i][0]
        path = root + titles[i] + "//"
        if not os.path.exists(path):
            os.mkdir(path)
        if not os.listdir(path):
            pageText = getHTMLText(pageUrl)
            totalPics = int(re.findall(r'<em>(.+)</em>)', pageText)[0])
            downUrl = re.findall(r'href="(.+?)" class="">下载图片', pageText)[0]
            cnt = 1;
            while (cnt <= totalPics):
                picPath = path + str(cnt) + ".jpg"
                r = requests.get(downUrl)
                with open(picPath, 'wb') as f:
                    f.write(r.content)
                    f.close()
                print('{} - 第{}张下载已完成\n'.format(titles[i], cnt))
                cnt += 1
                nextPageUrl = re.findall(r'href="(.+?)">下一张', pageText)[0]
                pageText = getHTMLText(nextPageUrl)
                downUrl = re.findall(r'href="(.+?)" class="">下载图片', pageText)[0]
    return

def main():
    name = input("请输入你喜欢的明星的名字:")
    nameUrl = "http://www.win4000.com/mt/" + ''.join(lazy_pinyin(name)) + ".html"
    try:
        text = getHTMLText(nameUrl)
        if not re.findall(r'暂无(.+)!', text):
            root = "D://pics//" + name + "//"
            if not os.path.exists(root):
                os.mkdir(root)
            downPictures(text, root, name)
            try:
                nextPage = re.findall(r'next" href="(.+)"', text)[0]
                while (nextPage):
                    nextText = getHTMLText(nextPage)
                    downPictures(nextText, root, name)
                    nextPage = re.findall(r'next" href="(.+)"'
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值