[Python人工智能] 一.TensorFlow环境搭建及神经网络入门 丨【百变AI秀】

举报
eastmount 发表于 2021/08/24 11:11:41 2021/08/24
【摘要】 从本篇文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。第一篇文章主要讲解神经网络基础概念,同时讲解TensorFlow2.0的安装过程及基础用法,主要结合作者之前的博客、AI经验和相关视频介绍,后面随着深入会讲解具体的项目及应用。基础性文章,希望对您有所帮助,同时自己也是人工智能的菜鸟,希望大家能与我在这一笔一划的博客中成长起来。

从本篇文章开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。第一篇文章主要讲解神经网络基础概念,同时讲解TensorFlow2.0的安装过程及基础用法,主要结合作者之前的博客和"莫烦大神"的视频介绍,后面随着深入会讲解具体的项目及应用。基础性文章,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵~同时自己也是人工智能的菜鸟,希望大家能与我在这一笔一划的博客中成长起来。

代码下载地址(欢迎大家关注点赞):



一.白话神经网络

第一部分将简单讲解"莫烦大神"网易云课程对神经网络的介绍,讲得清晰透彻,推荐大家阅读;第二部分将讲述我的理解。开始吧!让我们一起进入神经网络和TensorFlow的世界。

首先,什么是神经网络(Neural Networks)?
计算机神经网络是一种模仿生物神经网络或动物神经中枢,特别是大脑的结构和功能,它是一种数学模型或计算机模型。神经网络由大量的神经元连接并进行计算,大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应的过程。

现代神经网络是一种基于传统统计学建模的工具,常用来对输入和输出间复杂的关系进行建模,或探索数据间的模式,神经网络是一种运算模型,有大量的节点或神经元及其联系构成。和人类的神经元一样,它们负责传递信息和加工信息,神经元也能被训练或强化,形成固定的神经形态,对特殊的信息有更强烈的反应。

在这里插入图片描述

神经网络是如何工作的呢?
如上图所示,不管这是一只跳跃飞奔的猫,或是一只静静思考的猫,你都知道它是一只猫,因为你的大脑已经被告知过圆眼睛、毛茸茸、尖耳朵的就是猫,你通过成熟的视觉神经系统判断它是猫。计算机也是一样,通过不断的训练,告诉哪些是猫、哪些是狗、哪些是猪,它们会通过数学模型来概括这些学习的判断,最终以数学的形式(0或1)来分类。目前,谷歌、百度图片搜索都能清晰识别事物,这些都归功于计算机神经系统的飞速发展。

神经网络系统由多层神经层构成,为了区分不同的神经层,我们分为:

  • 输入层:直接接收信息的神经层,比如接收一张猫的图片
  • 输出层:信息在神经元中传递中转和分析权衡,形成输出结果,通过该层输出的结果可以看出计算机对事物的认知
  • 隐藏层:在输入和输出层之间的众多神经元连接组成的各个层面,可以有多层,负责对传入信息的加工处理,经过多层加工才能衍生出对认知的理解

在这里插入图片描述

神经网络举例说明
如下图所示,通常来说,计算机处理的东西和人类有所不同,无论是声音、图片还是文字,它们都只能以数字0或1出现在计算机神经网络里。神经网络看到的图片其实都是一堆数字,对数字的加工处理最终生成另一堆数字,并且具有一定认知上的意义,通过一点点的处理能够得知计算机到底判断这张图片是猫还是狗。

在这里插入图片描述

计算机是怎么训练的呢?
首先,需要很多的数据,比如需要计算机判断是猫还是狗,就需要准备上千万张有标记的图片,然后再进行上千万次的训练。计算机通过训练或强化学习判断猫,将获取的特征转换为数学的形式。

在这里插入图片描述

我们需要做的就是只给计算机看图片,然后让它给我们一个不成熟也不准确的答案,有可能100次答案中有10%是正确的。如果给计算机看图片是一张飞奔的猫(如下图),但计算机可能识别成一条狗,尽管它识别错误,但这个错误对计算机是非常有价值的,可以用这次错误的经验作为一名好老师,不断学习经验。

在这里插入图片描述

那么计算机是如何学习经验的呢?
它是通过对比预测答案和真实答案的差别,然后把这种差别再反向传递回去,修改神经元的权重,让每个神经元向正确的方向改动一点点,这样到下次识别时,通过所有改进的神经网络,计算机识别的正确率会有所提高。最终每一次的一点点,累加上千万次的训练,就会朝正确的方向上迈出一大步。

在这里插入图片描述

最后到验收结果的时候,给计算机再次显示猫的图片时,它就能正确预测这是一只猫。

在这里插入图片描述

激励函数是什么东东?
接着再进一步看看神经网络是怎么训练的。原来在计算机里每一个神经元都有属于它的激励函数(Active Function),我们可以利用这些激励函数给计算机一个刺激行为。当我们第一次给计算机看一只飞奔的猫时,神经网络中只有部分神经元被激活或激励,被激活传递下去的信息是计算机最为重视的信息,也是对输出结果最有价值的信息。

在这里插入图片描述

如果预测的结果是一只狗,所有神经元的参数就会被调整,这时有一些容易被激活的神经元就会变得迟钝,而另一些会变得敏感起来,这就说明了所有神经元参数正在被修改,变得对图片真正重要的信息敏感,从而被改动的参数就能渐渐预测出正确的答案,它就是一只猫。这就是神经网络的加工过程。

在这里插入图片描述


二.神经网络概念梳理

前面通过白话文讲述了神经网络之后,接下来我们对神经网络的概念从头再梳理一遍,这也是为后续深入学习奠定基础。

神经网络(也称人工神经网络,ANN)算法是80年代机器学习界非常流行的算法,不过在90年代中途衰落。现在,携着“深度学习”之势,神经网络重装归来,重新成为最强大的机器学习算法之一。

人工神经网络(Artificial Neural Network,缩写ANN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。其来源于生物,故吴老先先讲述了生物神经网络的基础知识,从而进行引入。

神经细胞通过轴突将信号传递给其他的神经细胞,通过树突向各个方向接受信号。
神经细胞利用电-化学过程交换信号。输入信号来自另一些神经细胞。这些神经细胞的轴突末梢(也就是终端)和本神经细胞的树突相遇形成突触(synapse),信号就从树突上的突触进入本细胞。

信号在大脑中实际怎样传输是一个相当复杂的过程,但就我们而言,重要的是把它看成和现代的计算机一样,利用一系列的0和1来进行操作。就是说,大脑的神经细胞也只有两种状态:兴奋(fire)和不兴奋(即抑制)。

神经细胞利用一种我们还不知道的方法,把所有从树突突触上进来的信号进行相加,如果全部信号的总和超过某个阈值,就会激发神经细胞进入兴奋(fire)状态,这时就会有一个电信号通过轴突发送出去给其他神经细胞。如果信号总和没有达到阈值,神经细胞就不会兴奋起来。这样的解释有点过分简单化,但已能满足我们的目的。

由于人脑具有一下几个特点:

  • 能实现无监督的学习
    大脑能够自己进行学习,而不需要导师的监督教导。如果一个神经细胞在一段时间内受到高频率的刺激,则它和输入信号的神经细胞之间的连接强度就会按某种过程改变,使得该神经细胞下一次受到激励时更容易兴奋。
  • 对损伤有冗余性(tolerance)
    大脑即使有很大一部分受到了损伤, 它仍然能够执行复杂的工作。
  • 处理信息的效率极高
    神经细胞之间电-化学信号的传递,与一台数字计算机中CPU的数据传输相比,速度是非常慢的,但因神经细胞采用了并行的工作方式,使得大脑能够同时处理大量的数据。例如,大脑视觉皮层在处理通过我们的视网膜输入的一幅图象信号时,大约只要100ms的时间就能完成,眼睛并发执行。
  • 善于归纳推广
    大脑和数字计算机不同,它极擅长的事情之一就是模式识别,并能根据已熟悉信息进行归纳推广(generlize)。例如,我们能够阅读他人所写的手稿上的文字,即使我们以前从来没见过他所写的东西。
  • 它是有意识的

如下图所示,它表示的是一个人工神经细胞。其中:

  • 输入(Input)
  • 权重(Weight):左边五个灰色圆底字母w代表浮点数
  • 激励函数(Activation Function):大圆,所有经过权重调整后的输入加起来,形成单个的激励值
  • 输出(Output):神经细胞的输出

进入人工神经细胞的每一个input(输入)都与一个权重w相联系,正是这些权重将决定神经网络的整体活跃性。假设权重为-1和1之间的一个随机数,权重可正可负(激发和抑制作用)。当输入信号进入神经细胞时,它们的值将与它们对应的权重相乘,作为图中大圆的输入。如果激励值超过某个阀值(假设阀值为1.0),就会产生一个值为1的信号输出;如果激励值小于阀值1.0,则输出一个0。这是人工神经细胞激励函数的一种最简单的类型。涉及的数学知识如下图所示:

如果最后计算的结果激励值大于阈值1.0,则神经细胞就输出1;如果激励值小于阈值则输出0。这和一个生物神经细胞的兴奋状态或抑制状态是等价的。下面图是通过神经网络实现逻辑表达式与运算:(参考NG斯坦福机器学习讲义)

可以看到x1和x2变量作为神经网络的输入,当它们取不同的0或1值时,其结果通过sigmod函数计算的值是不同的。它模拟了整个AND运算。

该图中神经网络共有三层 ( 注输入层不是神经细胞,神经细胞只有两层 ):
输入层中的每个输入都馈送到了隐藏层,作为该层每一个神经细胞的输入;然后,从隐藏层的每个神经细胞的输出都连到了它下一层(即输出层)的每一个神经细胞。

注意:
1.图中仅仅画了一个隐藏层,作为前馈网络,一般地可以有任意多个隐藏层。但在对付你将处理的大多数问题时一层通常是足够的。
2.事实上,有一些问题甚至根本不需要任何隐藏单元,你只要把那些输入直接连结到输出神经细胞就行了。
3.每一层实际都可以有任何数目的神经细胞,这完全取决于要解决的问题的复杂性。但神经细胞数目愈多,网络的工作速度也就愈低,网络的规模总是要求保持尽可能的小。

神经网络体系创建成功后,它必须接受训练来认出数字4,方法:
1.先把神经网络的所有权重初始化为任意值;
2.再给他一系列输入代表面板不同配置的输入,对每种输入配置,检查它的输出是什么,并调整相应权重;
3.如果我们送给网络的输入模式不是4,则我们知道网络应该输出一个0。因此每个非4字符时,网络权重应进行调整,使得它的输出趋向于0;当代表4的模式输送给网络时,则应把权重调整到使其输出趋向于1;
4.我们可以进一步识别0到9的所有数字或字母,其本质是手写识别的工作原理。
5.最后,网络不单能认识已经训练的笔迹,还显示了它有显著的归纳和推广能力。

正是这种归纳推广能力,使得神经网络已经成为能够用于无数应用的一种无价的工具,从人脸识别、医学诊断,直到跑马赛的预测,另外还有电脑游戏中的bot(作为游戏角色的机器人)的导航,或者硬件的robot(真正的机器人)的导航。

在这里插入图片描述
上图会演示神经网络在图像识别领域的一个著名应用,这个程序叫做LeNet,是一个基于多个隐层构建的神经网络。通过LeNet可以识别多种手写数字,并且达到很高的识别精度与拥有较好的鲁棒性。LeNet的发明人是机器学习的大牛Yann LeCun(目前google)。

右下方的方形中显示的是输入计算机的图像,方形上方的红色字样“answer”后面显示的是计算机的输出。左边的三条竖直的图像列显示的是神经网络中三个隐藏层的输出,可以看出,随着层次的不断深入,越深的层次处理的细节越低,例如层3基本处理的都已经是线的细节了。

这种类型的训练称作有监督的学习(supervised learnig),用来训练的数据称为训练集(training set)。调整权重可以采用许多不同的方法。对本类问题最常用的方法就是反向传播(backpropagation,简称backprop或BP)方法,即BP神经网络。

你自己可以去学习另外的一种训练方式,即根本不需要任何导师来监督的训练,或称无监督学习(unsupervised learnig)。下图是神经网络的简单回顾与总结:

最后给大家看一个利用神经网络对图片进行分类的例子:过程就不详细论述了,图片很清晰,对人、汽车、摩托车、卡车进行图片识别,而具体的隐藏层函数需要大家去深入研究,我自己研究得也很浅显,抱歉~


三.TensorFlow

1.TensorFlow简介

TensorFlow™是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief 。Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究 。

TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在内的多个项目以及各类应用程序接口(Application Programming Interface, API)。

TensorFlow官网:https://tensorflow.google.cn/

在这里插入图片描述

TensorFlow 是一个端到端开源机器学习平台。它拥有一个包含各种工具、库和社区资源的全面灵活生态系统,可以让研究人员推动机器学习领域的先进技术的发展,并让开发者轻松地构建和部署由机器学习提供支持的应用。总之,如果有TensorFlow,我们就可以很自如地玩转神经网络。

在这里插入图片描述

在这里插入图片描述


2.安装过程

TensorFlow即可以支持CPU,也可以支持CPU+GPU。前者的环境需求简单,后者需要额外的支持。TensorFlow的安装方式很多,包括:

  • pip 安装
  • virtualenv安装
  • docker安装
  • 从安装源安装

本文将使用pip安装,pip在每个系统的安装方式包括:

  • Linux \ MacOS \ Windows
  • CPU版 \ GPU版(GPU版本比CPU版本快很多倍)
  • 测试版
  • 更新TensorFlow

TensorFlow支持Windows用户,由于我的计算机是Windows操作系统,这里使用该方法进行安装,这里安装的环境为:Windows10+CPU+TensorFlow2.0+Anaconda+Python3.6


第一步:官网下载Anaconda并安装

在这里插入图片描述

第二步:安装Anaconda之后,打开“Anaconda Prompt”命令行,检查Anaconda是否安装成功及环境

//检查Anaconda是否成功安装
conda --version
//检测目前安装了哪些环境
conda info --envs

在这里插入图片描述

第三步:检查当前环境可以安装哪些版本的Python,作者选择Python3.6版本

conda search --full-name python

在这里插入图片描述

由于作者电脑不支持GPU,所以这里只安装CPU版本,GPU安装推荐下面文章。
tensorflow2.0GPU版本的环境配置与安装教程 normalization
[Tensorflow2.0] Tensorflow2.0的安装教程 - 牛andmore牛

在这里插入图片描述

第四步:创建环境,用来安装tensorflow2.0以及相关的python packages

conda create -n tf2 python=3.6

在这里插入图片描述

在这里插入图片描述

第五步:激活TensorFlow

activate tf2

在这里插入图片描述

第六步:安装cpu版本TensorFlow

pip install tensorflow==2.0.0-alpha0
  • conda search tensorflow #搜CPU版
  • conda search tensorflow-gpu #搜GPU版
  • conda install tensorflow=2.0.0 #安装CPU版
  • conda install tensorflow-gpu=2.0.0 #安装GPU版

在这里插入图片描述

在这里插入图片描述

此时,表示安装结束,接下来开始确认我们是否安装成功。

第七:打开Anaconda Navigator,选择环境“tf2”,点击spyder下面的“install”。

在这里插入图片描述

安装好就变成“Launch”了,点击就可以进去了。

在这里插入图片描述

第八步:输入代码验证是否安装成功。

import tensorflow as tf 
print(tf.__version__)

在这里插入图片描述

如果需要退出环境,可以输入下面命令。

在这里插入图片描述


3.基础入门

最后给出一个简单的实例代码:

# -*- coding: utf-8 -*-
"""
Spyder Editor

This is a temporary script file.

By:Eastmount CSDN YXZ 2019-11-28
"""

import tensorflow as tf 

#查询TensorFlow版本
print(tf.__version__)

#定义a和b为两个常量
a = tf.constant([1, 2], name="a")
b = tf.constant([2, 3], name="b")
print(a)
print(b)

#随机生成一个正态分布
output = tf.random.normal([5,3])
print(output)

#创建2个矩阵并进行相乘
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[1, 2],[3, 4]])
product = tf.matmul(matrix1,matrix2)
print(matrix1)
print(matrix2)
print(product)
print(product.numpy())

输出结果如下所示:

2.0.0-alpha0

tf.Tensor([1 2], shape=(2,), dtype=int32)
tf.Tensor([2 3], shape=(2,), dtype=int32)

tf.Tensor(
[[-2.1826832  -0.32986134 -1.6238695 ]
 [-0.18214056  0.25923613 -0.12570491]
 [ 1.0550841  -0.6655764  -1.5837296 ]
 [-0.10004017  0.0162886   0.9483853 ]
 [ 0.4709251  -0.18713968  0.8347026 ]], shape=(5, 3), dtype=float32)
 
tf.Tensor([[3 3]], shape=(1, 2), dtype=int32)
tf.Tensor(
[[1 2]
 [3 4]], shape=(2, 2), dtype=int32)
 
tf.Tensor([[12 18]], shape=(1, 2), dtype=int32)
[[12 18]]

四.总结

最后希望基础性文章对您有所帮助,作者也是这个领域的菜鸟一枚,希望与您共同进步,后续会继续深入分享Python人工智能系列,如果喜欢点个赞评论,共勉~

在这里插入图片描述

中午惊喜收到女神的小蛋糕,下午期末考试,一直忙到凌晨2点,静寂中又涨了一岁。花开蝴蝶自然来,希望自己一直善良下去,品尝到更多幸福的味道。感谢这些年所有帮助和祝福我的人,无以回报,只能去帮助更多的人,分享更好的博客,备好每一次讲台前的课程。忙中带乐,晚安娜,明天接着奋斗~

感恩能与大家在华为云遇见!
希望能与大家一起在华为云社区共同成长。原文地址:https://blog.csdn.net/Eastmount/article/details/103282042
【百变AI秀】有奖征文火热进行中:https://bbs.huaweicloud.cn/blogs/296704


(By:娜璋之家 Eastmount 2021-08-20 夜于贵阳)


参考文献:

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。