tnblog
首页
视频
资源
登录

python 深度学习DeepLearning(学习笔记)

6240人阅读 2023/4/25 14:06 总访问:3455016 评论:0 收藏:0 手机
分类: AI

python 深度学习DeepLearning(学习笔记)

什么是深度学习DeepLearning?


深度学习就是不断增加一个神经网络的隐藏层神经元,让输入的数据被这些神经元不断的抽象和理解,最后得到一个具有泛化能力的预测网络模型,一般我们把隐藏层超过三层的网络模型称为深度神经网络。
这个过程有时会很难用数学的方式进行理解它在理解什么,当然我们可以通过收集数据、送入数据、进行训练然后期待结果。
我们也可以通过设置学习率、激活函数、神经元数量,来调节神经网络的大致行为,俗称调参。


我们以tensorflow为例,http://playground.tensorflow.org/

Tensorflow游乐场


我们可以看到这里有四种数据集,我们可以先尝试一下第三种数据集。

豆豆普通分类实践


红色的豆豆表示无毒,蓝色的豆豆表示有毒,我们可以设置我们熟悉的Sigmoid进行训练,并设置学习率为0.03,然后点击开始训练。


我们发现它做出了很好的分类。

豆豆圆形分类实践


我们再来看第一种,上面圆圈蓝色是有毒的豆豆,下面黄色是无毒的豆豆。


通过分析我们发现三条线可以很好的进行闭合形成一个圆圈,所以我们在Tensorflow游乐场中可以添加三个神经元进行训练。

异或数据集


当时为了证明感知器模型没有什么用处,便提出了异或的问题。


异或问题:相同的数为1,不同的数为0,这样如此简单的数都无法进行区别,导致神经网络在当时处于很长的一个低谷期。


这里我们同样通过3个神经元可以进行训练,从而得出的我们想要达到的目的,但这是为什么?待会会进行解释。

螺旋数据集


这种像蚊香一样的螺旋数据集,我们使用三个隐藏层每层四个神经元进行训练发现非常的吃力。


这是由于我们的sigmoid函数出现了问题,导数远离了中心位置但是导数可导依旧不为0,但是导数很小,这样梯度下降就很难进行。


所以现在的人们很难使用sigmoid进行训练模型,而是使用Relu的激活函数。
在线性结果z大于0的使用输出值为z,而在z小于0的时候固定为0,这样在z大于0的时候处处可导而且不会出现梯度消失的情况。
在z=0的时候从数学上来看这个折点确实不可导,但如果真的遇到这个点需要特殊处理一下了。
Relu的缺陷:当然如果a小于0的部分,很有可能让神经元死亡,也就是所谓的Dead Relu Problem,因为在反向传播的时候链式求导法则中,如果激活函数是0梯度为权重将无法更新。


所以人们又改进了relu为reaky-relu,在z小于0的时候输出不再是0而是一个缓缓倾斜的直线,这样就可以避免死亡relu问题


当然关于梯度消失的问题有很多,直接使用relu函数进行训练模型同样可以达到很好训练效果。
如果没有特别的需求Relu一定是首选。
我们再此使用Tensorflow游乐场选择Relu函数并在每一层加到八个神经元进行训练,会发现可以得到很好效果。

编码实践


接下来我们通过编码来对螺旋形数据集进行实践。


首先准备数据。

  1. import numpy as np
  2. import random
  3. def get_beans9(counts):
  4. posX,posY = genSpiral(int(counts/2),0,1)
  5. negX,negY = genSpiral(int(counts/2),np.pi,0)
  6. X = np.vstack((posX,negX))
  7. Y = np.hstack((posY,negY))
  8. return X,Y
  9. def genSpiral(counts,deltaT, label):
  10. X = np.zeros((counts,2))
  11. Y = np.zeros(counts)
  12. for i in range(counts):
  13. r = i / counts * 5
  14. t = 1.75 * i / counts * 2 * np.pi + deltaT;
  15. x1 = r * np.sin(t) + random.uniform(-0.1,0.1)
  16. x2 = r * np.cos(t) + random.uniform(-0.1,0.1)
  17. X[i] = np.array([x1,x2])
  18. Y[i] = label
  19. return X,Y
  20. def dist(a, b):
  21. dx = a['x'] - b['x'];
  22. dy = a['y']- b['y'];
  23. return np.sqrt(dx * dx + dy * dy);
  24. def getCircleLabel(p, center):
  25. radius = 1;
  26. if dist(p, center) < (radius * 0.5):
  27. return 1
  28. else:
  29. return 0
  30. def randUniform(a=-1, b=1):
  31. return np.random.rand() * (b - a) + a;
  32. def classifyCircleData(numSamples=100, noise=0):
  33. points = [];
  34. Y = []
  35. X = []
  36. radius = 1;
  37. num = int(numSamples/2)
  38. for i in range(num):
  39. r = randUniform(0, radius * 0.5);
  40. angle = randUniform(0, 2 * np.pi);
  41. x = r * np.sin(angle);
  42. y = r * np.cos(angle);
  43. noiseX = randUniform(-radius, radius) * noise;
  44. noiseY = randUniform(-radius, radius) * noise;
  45. label = getCircleLabel({'x': x + noiseX, 'y': y + noiseY}, {'x': 0, 'y': 0});
  46. X.append([x+1,y+1])
  47. Y.append(label)
  48. for i in range(num):
  49. r = randUniform(radius * 0.7, radius);
  50. angle = randUniform(0, 2 * np.pi);
  51. x = r * np.sin(angle);
  52. y = r * np.cos(angle);
  53. noiseX = randUniform(-radius, radius) * noise;
  54. noiseY = randUniform(-radius, radius) * noise;
  55. label = getCircleLabel({'x': x + noiseX, 'y': y + noiseY}, {'x': 0, 'y': 0});
  56. X.append([x+1,y+1])
  57. Y.append(label)
  58. X = np.array(X)
  59. Y = np.array(Y)
  60. return X,Y


设置为与Tensorflow游乐场一样,三层隐藏层每层8个神经元。

  1. import dataset
  2. import numpy as np
  3. import plot_utils_2
  4. from keras.models import Sequential
  5. from keras.layers import Dense
  6. from keras.optimizers import SGD
  7. m = 100
  8. X,Y = dataset.get_beans9(m)
  9. # 显示散点图
  10. plot_utils_2.show_scatter(X,Y)
  11. # 设置训练层以及神经元数量
  12. model = Sequential()
  13. model.add(Dense(units=8, activation='relu', input_dim=2))
  14. model.add(Dense(units=8, activation='relu'))
  15. model.add(Dense(units=8, activation='relu'))
  16. model.add(Dense(units=1, activation='sigmoid'))
  17. # 设置策略,0.05的阿尔法每次,按照准确率
  18. model.compile(loss='mean_squared_error',optimizer=SGD(lr=0.05),metrics=['accuracy'])
  19. model.fit(X, Y, epochs=5000, batch_size=10)
  20. pres = model.predict(X)
  21. plot_utils_2.show_scatter_surface(X,Y,model)
  22. print(model.get_weights())


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

python实例 1-日志抓取处理 补错(附日志小技巧

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

python安装pip以及使用pip安装requests等模块

pip很简单的介绍pip 是一个现代的,通用的 Python 包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能。如果想...

python数据集合区别

列表(list):可读写,值可以重复,有序排列,初始化语法:[&#39;tom&#39;,‘jerry’]元组(tuple):只读,值可以重复,...

python实例 2-12306抢票(二) 下单

第二篇 刷票与下单1.记住登陆上一篇写了登陆:http://www.tnblog.net/cz/article/details/162 为了方便调试 不让每次登陆都...

使用VS Code开发python

Vs Code开发Python可以很好的支持代码调试、智能提示、代码对齐等1:下载VS Codehttps://code.visualstudio.com/Downloadvs ...

python变量与命名

Python使用等号 ( = ) 作为赋值运算符,例如a = 66 就是一条赋值语句,作用就是将66赋值给变量a。Python是弱类型语言,弱类...

python关键字和内置函数

Python中包含了如下所示的关键字:上面这些关键字都不能作为变量名。另外,Python 3还提供了如下表所示的内置函数:也不能...

python基础输入和输出

Python使用print()函数向打印程序输出,采用input()函数接收程序输入。print()函数的语法格式如下:print(value,...,sep=&#...

python基本数据类型

Python包含两大类基本数据类型:数值类型、字符串类型,三大类组合数据类型:集合类型、序列类型和字典类型.数值类型:整型...

python中通过fake_useragent生成随机UserAgent

fake_useragent第三方库,来实现随机请求头的设置;GitHub ---&gt; https://github.com/hellysmile/fake-useragent安...

python 升级pip

一条命令即可: python -m pip install --upgrade pip 安装成功后,一般是在python目录下面的Scripts里边的

python html编码解码

使用方法:html.escape(s)与html.unescape即可 import html s=&quot;&lt;div&gt;jsdlfjsl&lt;/div&gt;&quot; #html编...
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术