深度学习|Tensorflow图像识别基础(一)

    学了有一段时间的图像识别的相关知识,始终不得入门,最近才有所心得。在这里做一点头脑笔记。

    环境安装配置

    首先我们要配置tensorflow的开发环境,为什么要用tensorflow,跟着谷歌爸爸就不会错滴。安装python的集成环境Anaconda3,创建一个叫tensorflow的虚拟运行环境,同时安装python3.5这个坑不知道有没有人遇到,我本来按的是2.7版本的,然后改成最新3.6,都不支持tensorflow,后来我看到有博主说tensorflow只支持3.5,我也不知道真假,反正3.5是没问题)。

    选PyCharm作为IDE注意,在setting下选择Project Interpreter 选择python.exe是,要选择tensorflow虚拟环境下的python.exe,位置在envs/tensorflow/python.exe, 这个坑我也踩过。当你import tensorflow as tf不会报错就没问题了。

    MINST数据模型

    我们都知道手写数字MINST是机器学习的Hello World,就以这个为例简单体验一下。

    导入数据:由于tensorflow里面有这个数据集,我们就不用在网上去下载了,很多老的博客都说去下载,别信。

    两行代码:

from tensorflow.examples.tutorials.mnist import input_data

# Get MNIST Data
mnist = input_data.read_data_sets('MNIST_data/', one_hot=True)

    我们先不弄CNN的,简单版本的来试下水。

    首先,我们要搞清楚我们研究的问题本质是什么,我们要区分0到9这十个手写字,解决方法是构建一个模型来训练,然后这个训练后的模型可以区分新的图片。难点在于模型如何构建?如何判断这个模型是好是坏?

    我们要明白,我们无法做到准确判断,只能给出概率,相信你可以理解。还有一点,这本质是一个线性回归的问题,相信也可以理解。所以这个模型构建就很容易理解了,就是一个函数 y=wx+b,w叫权重,b叫做偏置项。我们要做的工作就是找到一个很棒的w和b, 有人说机器学习就是调参的过程,我深以为然。当然如果你运气好,一步到位,接下来的工作就不用做了,不过这可是玄学,还是老实点来优化你的参数吧。

    实现回归模型y=wx+b,y是要输出的,x就是我们需要输入的,我们输入的是一张张图片,当然直接是无法计算的,所以用像素来计算,每张图片是 28 x 28 像素,即 784 个像素点,我们可以把它展开形成一个向量,即长度为 784 的向量。训练集我们可以转化为 [55000, 784] 的向量。具体怎么算,详看代码。然后我们需要有一个指标来评估我们模型是好是坏啊,它就是成本或者损失。损失越小当然我们模型也就越棒。

    非常漂亮的成本函数是“交叉熵”。交叉熵产生于信息论里面的信息压缩编码技术,但是它后来演变成为从博弈论到机器学习等其他领域里的重要技术手段。信息论中的熵是指信息不确定性的度量。熵越高代表为了呈现某个事物所需要的信息量就越多。熵的值都是基于概率的,其概率解释是:当某些事物在样本空间中的占比率越高,则需要将他描述出来的信息量越少。而交叉熵计算公式为

                                                                          

    具体可以自行百度,现在你只需要知道它是用来计算损失函数的,我们怎么让这个损失变得最小呢,这里用到经典的梯度下降法,tensorflow 只需将每个变量一点点地往使成本不断降低的方向移动即可

    有一个问题,无论是我们训练还是最后识别的时候,我们计算出的线性输出可能不是一个0到1之间的概率(且所有概率之和为1),比如计算出来的是2.2,4.3,-1.1,怎么会有负数,这很有可能。用Softmax 可以解决,它可以看成是一个激励函数或者链接函数,把我们定义的线性函数的输出转换成我们想要的格式,也就是关于 10 个数字类的概率分布

                                                                                 

    Softmax 的过程首先会对各个值进行次幂计算,然后计算各个次幂结果占总次幂结果的比重,所以这样我们就可以实现差别的放缩,即好的更好、差的更差。

    接下来运行设置好了模型,我们把它放到 Session 里面运行,之后然后可以测试这个模型。详看代码。最后可以看看你模型的准确率。

    还有一个问题就是为什么有训练集、测试集,还有验证集呢对原始数据进行三个数据集的划分,也是为了防止模型过拟合。过拟合是什么呢,就是在训练的时候表现很好,真正测试的时候呢,就错误百出。训练集和测试集很好理解,而验证集就是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。

    最终的结果还是找出一个最佳的参数,而废了这么大劲。不过这也是前人优秀的经验,值得赞扬。

    下一篇总结使用卷积神经网络CNN来训练模型,是的,厉害的还在后面。


    

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
苹果图像识别可以使用深度学习技术,如卷积神经网络(CNN)来实现。以下是一个基于TensorFlow的苹果图像识别程序的示例: 1. 数据集准备 首先,需要准备一个包含苹果图像的数据集。可以从互联网上下载一些包含苹果的图像,或者自己拍摄一些苹果照片。将这些图像按照训练集、验证集和测试集的比例进行划分。 2. 数据预处理 对于每个图像,需要进行预处理操作,以便于输入到卷积神经网络中。可以使用Python的OpenCV库来进行图像的读取和处理。预处理操作包括:将图像缩放为统一的大小、转化为灰度图像、归一化等。 3. 构建卷积神经网络模型 使用TensorFlow来构建卷积神经网络模型。模型的结构可以根据具体需求进行设计。常见的卷积神经网络结构包括:LeNet、AlexNet、VGG、ResNet等。在模型的最后一层加上Softmax层,以便于进行分类操作。 4. 训练模型 使用训练集来训练模型。每个训练样本包括苹果图像和对应的标签(例如“红苹果”、“绿苹果”等)。使用交叉熵作为损失函数,使用随机梯度下降(SGD)算法进行优化。训练过程中,可以使用验证集来监测模型的性能,并调整超参数。 5. 测试模型 使用测试集来测试模型的性能。对于每张测试图像,输入到模型中,得到模型的输出。将输出结果与真实标签进行比较,计算准确率和损失函数等指标。 以上是一个基于TensorFlow的苹果图像识别程序的简单流程。实际应用中,还需要考虑一些细节问题,如数据增强、正则化、Dropout等技术,以提高模型的性能和鲁棒性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值