TensorFlow ML cookbook 第一章7、8节 实现激活功能和使用数据源

问题导读: 1、TensorFlow中有哪些激活函数? 2、如何运行激活函数? 3、TensorFlow有哪些数据源? 4、如何获得及使用数据源?

上一篇:TensorFlow ML cookbook 第一章5、6节 使用矩阵和声明操作 实现激活功能 准备 当我们开始使用神经网络时,我们会定期使用激活函数,因为激活函数是任何神经网络的强制性部分。 激活功能的目标是调整重量和偏差。 在TensorFlow中,激活函数是对张量起作用的非线性运算。 它们是以类似于以前的数学运算的方式运行的函数。 激活函数有很多用途,但是一些主要的概念是在标准化输出的同时,它们将非线性引入到图中。 使用以下命令启动TensorFlow图形:

[Bash shell] 纯文本查看 复制代码

?

import tensorflow as tf
sess = tf.Session()

如何做 激活函数位于TensorFlow中的神经网络(nn)库中。 除了使用内置的激活功能外,我们还可以使用TensorFlow操作来设计我们自己的激活功能。 我们可以导入预定义的激活函数(将tensorflow.nn导入为nn)或者在函数调用中显式地写入.nn。 在这里,我们选择明确每个函数调用: 1.被称为ReLU的整流线性单元是将非线性引入到神经网络中的最普遍和最基本的方式。 这个函数只是max(0,x)。 这是连续的,但不平稳。 它显示如下:

[Bash shell] 纯文本查看 复制代码

?

print(sess.run(tf.nn.relu([-3., 3., 10.])))
[ 0. 3. 10.]

2.有时我们希望限制前面的ReLU激活函数的线性递增部分。 我们可以通过将max(0,x)函数嵌套到min()函数中来实现。 TensorFlow的实现被称为ReLU6函数。 这被定义为min(max(0,x),6)。 这是hard-sigmoid函数的一个版本,计算速度更快,不会受到消失(无限小近零)或爆炸值的影响。 当我们在第8章卷积神经网络和第9章递归神经网络中讨论更深的神经网络时,这将会派上用场。 它显示如下:

[Bash shell] 纯文本查看 复制代码

?

print(sess.run(tf.nn.relu6([-3., 3., 10.])))
[ 0. 3. 6.]

3.Sigmoid函数是最常见的连续平滑激活函数。 它也被称为逻辑函数,具有1 /(1 + exp(-x))的形式。 由于在训练期间倾向于将反向传播项归零,所以不常使用S形。 它显示如下:

[Bash shell] 纯文本查看 复制代码

?

print(sess.run(tf.nn.sigmoid([-1., 0., 1.])))
[ 0.26894143 0.5 0.7310586 ]

我们应该知道一些激活函数不是零中心的,例如S形。 这将要求我们在大多数计算图算法中使用数据之前将数据置零。 4.另一个平滑的激活函数是超切线。 超切线函数与sigmoid非常相似,除了不是介于0和1之间的范围,而是介于-1和1之间的范围。函数具有双曲正弦与双曲余弦之比的形式。 但另一种写法是((exp(x) - exp(-x))/(exp(x)+ exp(-x)),如下所示:

[Bash shell] 纯文本查看 复制代码

?

print(sess.run(tf.nn.tanh([-1., 0., 1.])))
[-0.76159418 0. 0.76159418 ]

5.softsign函数也被用作激活函数。 这个函数的形式是x /(abs(x)+ 1)。 softsign函数应该是对符号函数的连续逼近。 它显示如下:

[Bash shell] 纯文本查看 复制代码

?

print(sess.run(tf.nn.softsign([-1., 0., -1.])))
[-0.5 0. 0.5]

6.另一个函数softplus是ReLU函数的一个平滑版本。 这个函数的形式是log(exp(x)+ 1)。 它显示如下:

[Bash shell] 纯文本查看 复制代码

?

print(sess.run(tf.nn.softplus([-1., 0., -1.])))
[ 0.31326166 0.69314718 1.31326163]

softplus随着输入的增加而变为无穷大,而softsign则变为1.然而,随着输入变小,softplus接近零,softsign变为-1。 7.指数线性单位(ELU)与softplus函数非常相似,除了底部渐近线是-1而不是0.如果x <0 else x,则形式为(exp(x)+1)。 它显示如下:

[Bash shell] 纯文本查看 复制代码

?

print(sess.run(tf.nn.elu([-1., 0., -1.])))
[-0.63212055 0. 1. ]

如何运行 这些激活函数是我们将来在神经网络或其他计算图中引入非线性的方式。 注意在我们的网络中我们使用激活功能的位置很重要。 如果激活函数的范围在0到1之间(sigmoid),那么计算图只能输出0到1之间的值。 如果激活函数在节点内部并隐藏起来,那么我们想要知道范围在我们传递给它的张量上可能会产生的效果。 如果我们的张量的平均值为零,我们将要使用一个激活函数,尽可能地保留零附近的变化。 这意味着我们要选择一个激活函数,如双曲正切(tanh)或softsign。 如果张量全部被调整为正值,那么理想情况下我们将选择一个激活函数来保留正域中的方差。 更多 这里有两个图表来说明不同的激活功能。 下图显示了以下函数ReLU,ReLU6,softplus,指数LU,S形,softsign和双曲正切:

图3:softplus,ReLU,ReLU6和指数LU的激活功能 在图3中,我们可以看到四个激活函数softplus,ReLU,ReLU6和指数LU。 这些函数向左变为零,然后线性增加到零的右侧,除了ReLU6,其最大值为6:

图4:Sigmoid,双曲正切(tanh)和软标志激活函数 在图4中,我们有激活函数sigmoid,双曲正切(tanh)和softsign。 这些激活功能都是平滑的,并具有S形状。 请注意,这些函数有两个水平渐近线。 使用数据源 对于本书的大部分内容,我们将依靠使用数据集来使用机器学习算法。 本节介绍如何通过TensorFlow和Python访问各种数据集。 准备 在TensorFlow中,我们将使用的一些数据集内置到Python库中,其中一些将需要Python脚本下载,另一些将通过Internet手动下载。 几乎所有这些数据集都需要有效的Internet连接才能检索数据。 如何做 1. iris数据:这个数据集可以说是机器学习中使用的最经典的数据集,也许是所有的统计数据。 这是一个数据集,测量萼片长度,萼片宽度,花瓣长度和花瓣宽度的三个不同类型的鸢尾花:Iris setosa, Iris virginica, and Iris versicolor. 总共有150个测量值,每个物种有50个测量值。 要在Python中加载数据集,我们使用Scikit Learn的数据集函数,如下所示:

[Bash shell] 纯文本查看 复制代码

?

from sklearn import datasets
iris = datasets.load_iris()
print(len(iris.data))
150
print(len(iris.target))
150
print(iris.target[0]) # Sepal length, Sepal width, Petal length, Petal width
[ 5.1 3.5 1.4 0.2]
print(set(iris.target)) # I. setosa, I. virginica, I. versicolor
{0, 1, 2}

2.出生体重数据:马萨诸塞大学阿默斯特分校编制了许多有趣的统计数据集(1)。 一个这样的数据集是衡量婴儿出生体重和其他人口统计和医疗测量的母亲和家庭的历史。 有11个变量有189个观察值。 这里是如何访问Python中的数据:

[Bash shell] 纯文本查看 复制代码

?

import requests
birthdata_url = 'https://www.umass.edu/statdata/statdata/data/ lowbwt.dat'
birth_file = requests.get(birthdata_url)
birth_data = birth_file.text.split('\'r\n') [5:]
birth_header = [x for x in birth_data[0].split( '') if len(x)>=1]
birth_data = [[float(x) for x in y.split( ')'' if len(x)>=1] for y in birth_data[1:] if len(y)>=1]
print(len(birth_data))
189
print(len(birth_data[0]))
11

3.波士顿房屋数据:卡内基梅隆大学在其Statlib图书馆中维护一个数据库库。 这个数据很容易通过加州大学欧文分校的机器学习库(2)获得。 有506房屋价值的观察与各种人口数据和住房属性(14变量)。 这里是如何访问Python中的数据:

[Bash shell] 纯文本查看 复制代码

?

import requests
housing_url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data'
housing_header = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV0']
housing_file = requests.get(housing_url)
housing_data = [[float(x) for x in y.split( '') if len(x)>=1] for y in housing_file.text.split('\n') if len(y)>=1]
print(len(housing_data))
506
print(len(housing_data[0]))
14

4.MNIST手写数据:MNIST(混合国家标准与技术研究院)是较大的NIST手写数据库的子集。 MNIST手写数据集位于Yann LeCun网站(https://yann.lecun.com/exdb/mnist /)上。 它是一个包含7万个单位数字图像(0-9)的数据库,其中约6万个注释用于训练集,10,000个用于测试集。 这个数据集经常用于图像识别,TensorFlow提供了内置函数来访问这些数据。 在机器学习中,提供验证数据以防止过度拟合(目标泄漏)也很重要。 由于这个TensorFlow,把5000个火车集合放到一个验证集中。 这里是如何访问Python中的数据:

[Bash shell] 纯文本查看 复制代码

?

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/"," one_hot=True)
print(len(mnist.train.images))
55000
print(len(mnist.test.images))
10000
print(len(mnist.validation.images))
5000
print(mnist.train.labels[1,:]) # The first label is a 3'''
[ 0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]

5.垃圾邮件文本数据。 UCI的机器学习数据库库(2)也包含垃圾邮件文本消息数据集。 我们可以访问这个.zip文件并获取垃圾邮件文本数据,如下所示:

[Bash shell] 纯文本查看 复制代码

?

import requests
import io
from zipfile import ZipFile
zip_url = 'http://archive.ics.uci.edu/ml/machine-learning-databases/00228/smsspamcollection.zip'
r = requests.get(zip_url)
z = ZipFile(io.BytesIO(r.content))
file = z.read('SMSSpamCollection')
text_data = file.decode()
text_data = text_data.encode('ascii',errors='ignore')
text_data = text_data.decode().split(\n')
text_data = [x.split(\t') for x in text_data if len(x)>=1]
[text_data_target, text_data_train] = [list(x) for x in zip(*text_ data)]
print(len(text_data_train))
5574
print(set(text_data_target))
{'ham', 'spam'}
print(text_data_train[1])
Ok lar... Joking wif u oni...

6.Movie评论数据:Cornell的Bo Pang发布了一个电影评论数据集,将评论分为好或坏(3)。 你可以在网站上找到这些数据,http://www.cs.cornell.edu/people/pabo/movie-review-data/。 要下载,提取和转换这些数据,我们运行以下代码:

[Bash shell] 纯文本查看 复制代码

?

import requests
import io
import tarfile
movie_data_url = 'http://www.cs.cornell.edu/people/pabo/movie-review-data/rt-polaritydata.tar.gz'
r = requests.get(movie_data_url)
# Stream data into temp object
stream_data = io.BytesIO(r.content)
tmp = io.BytesIO()
while True:
    s = stream_data.read(16384)
    if not s:
        break
    tmp.write(s)
stream_data.close()
tmp.seek(0)
# Extract tar file
tar_file = tarfile.open(fileobj=tmp, mode="r:gz")
pos = tar_file.extractfile('rt'-polaritydata/rt-polarity.pos')
neg = tar_file.extractfile('rt'-polaritydata/rt-polarity.neg')
# Save pos/neg reviews (Also deal with encoding)
pos_data = []
for line in pos:
    pos_data.append(line.decode('ISO'-8859-1'). encode('ascii',errors='ignore').decode())
neg_data = []
for line in neg:
    neg_data.append(line.decode('ISO'-8859-1'). encode('ascii',errors='ignore').decode())
tar_file.close()
print(len(pos_data))
5331
print(len(neg_data))
5331
# Print out first negative review
print(neg_data[0])
simplistic , silly and tedious .

7.CIFAR-10图像数据:加拿大高级研究所已经发布了一个图像集,其中包含8000万个标记的彩色图像(每个图像缩放为32x32像素)。 有10个不同的目标类(飞机,汽车,鸟类等)。 CIFAR-10是一个拥有60,000个图像的子集。 训练集中有50,000张图片,测试集中有10,000张。 由于我们将以多种方式使用这个数据集,并且因为它是我们较大的数据集之一,所以每次我们需要时都不会运行脚本。 要获得这个数据集,请导航到http://www.cs.toronto.edu/~kriz/cifar.html,然后下载CIFAR-10数据集。 我们将解释如何在适当的章节中使用这个数据集。 8.莎士比亚文本资料:古腾堡计划(5)是一个发行电子版免费书籍的项目。 他们把莎士比亚的所有作品汇编在一起,下面是如何通过Python访问文本文件:

[Bash shell] 纯文本查看 复制代码

?

import requests
shakespeare_url = 'http://www.gutenberg.org/cache/epub/100/pg100. txt'
# Get Shakespeare text
response = requests.get(shakespeare_url)
shakespeare_file = response.content
# Decode binary into string
shakespeare_text = shakespeare_file.decode('utf-8')
 
# Drop first few descriptive paragraphs.
shakespeare_text = shakespeare_text[7675:]
print(len(shakespeare_text)) # Number of characters
5582212

9.英语 - 德语句子翻译数据:Tatoeba项目(http:// tatoeba.org)收集多种语言的句子翻译。 他们的数据已经在Creative Commons License下发布。 根据这些数据,ManyThings.org(http://www.manythings.org)已经在可供下载的文本文件中编译了句子到句子的翻译。 这里我们将使用英文 - 德文翻译文件,但是您可以将URL更改为您想要使用的任何语言:

[Bash shell] 纯文本查看 复制代码

?

import requests
import io
from zipfile import ZipFile
sentence_url = 'http://www.manythings.org/anki/deu-eng.zip'
r = requests.get(sentence_url)
z = ZipFile(io.BytesIO(r.content))
file = z.read('deu.txt''')
# Format Data
eng_ger_data = file.decode()
eng_ger_data = eng_ger_data.encode('ascii''',errors='ignore''')
eng_ger_data = eng_ger_data.decode().split(\n''')
eng_ger_data = [x.split(\t''') for x in eng_ger_data if len(x)>=1]
[english_sentence, german_sentence] = [list(x) for x in zip(*eng_ ger_data)]
print(len(english_sentence))
137673
print(len(german_sentence))
137673
print(eng_ger_data[10])
['I won!, 'Ich habe gewonnen!']

如何运行 当在配方中使用这些数据集中的一个时,我们将参考本节,并假定数据以前面介绍的方式加载。如果需要进一步的数据转换或预处理,则这些代码将在配方本身中提供。

原文发布于微信公众号 - about云(wwwaboutyuncom)

原文发表时间:2017-11-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏尾尾部落

使用自己的语料训练word2vec模型

先对新闻文本进行分词,使用的是结巴分词工具,将分词后的文本保存在seg201708.txt,以备后期使用。

5892
来自专栏企鹅号快讯

从零开始用Python构造决策树

来源:Python中文社区 作者:weapon 本文长度为700字,建议阅读5分钟 本文介绍如何不利用第三方库,仅用python自带的标准库来构造一个决策树。 ...

2977
来自专栏FreeBuf

用机器学习玩转恶意URL检测

前段时间漏洞之王Struts2日常新爆了一批漏洞,安全厂商们忙着配合甲方公司做资产扫描,漏洞排查,规则大牛迅速的给出”专杀”规则强化自家产品的规则库。这种基于规...

8759
来自专栏新智元

【重磅】Jeff Dean等提出自动化分层模型,优化CPU、GPU等异构环境,性能提升超 60%

谷歌大脑Jeff Dean等人最新提出一种分层模型,这是一种灵活的端到端方法,用于优化CPU、GPU等的自动化设备配置。该方法在多个主要神经网络模型上测...

3217
来自专栏机器之心

GPU捉襟见肘还想训练大批量模型?谁说不可以

2018 年的大部分时间我都在试图训练神经网络时克服 GPU 极限。无论是在含有 1.5 亿个参数的语言模型(如 OpenAI 的大型生成预训练 Transfo...

3493
来自专栏点滴积累

geotrellis使用(十六)使用缓冲区分析的方式解决投影变换中边缘数据值计算的问题

Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 问题探索 ...

3504
来自专栏机器学习算法工程师

深度学习必备---用Keras和直方图均衡化---数据增强

作者:王抒伟 编辑:王抒伟 算了 爱看多久看多久 在读这技术文章之前,请大家想象一个标准河南口音的娃在读这篇文章,那么你不知不觉,你的嘴角就上扬咯。 俺、...

1.8K4
来自专栏程序员宝库

Python验证码识别:利用pytesser识别简单图形验证码

来源: j_hao104 my.oschina.net/jhao104/blog/647326 一、探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图...

61210
来自专栏机器之心

手把手教你为iOS系统开发TensorFlow应用(附开源代码)

选自machinethink.net 机器之心编译 参与:赵华龙、邵明、吴攀、李泽南 在你使用深度神经网络做预测之前,你首先要训练神经网络。现在存在许多不同的神...

3099
来自专栏程序你好

使用ML.Net和CSharp语言进行机器学习

本文介绍.net中的机器学习技术实现,不涉及数学方面的内容。它将重点关注在.net中的基本工作流程及其数据处理结构,以及怎么样通过使用开源项目ML.Net 0....

5533

扫码关注云+社区

领取腾讯云代金券