资讯专栏INFORMATION COLUMN

Theano - 循环

import. / 2422人阅读

摘要:复发的一种常用形式,可以用于循环和是的特例可以根据一些输出序列一个函数,每一步都会生成一个输出可以查看之前步的输出给定一个初始状态可以通过函数计算一个列表的和通常一个循环可以用操作符进行实现使用的优点迭代次数为符号图的一部分最大限度地减少传

Scan

复发(Recurrence)的一种常用形式,可以用于循环(looping)

Reduction和map是scan的特例

可以根据一些输出序列scan一个函数(function),每一步都会生成一个输出

可以查看之前k步的输出

给定一个初始状态z=0,可以通过scan函数z + x(i)计算一个列表的和sum(a_list)

通常一个for循环可以用scan()操作符进行实现

使用scan的优点:

迭代次数为符号图的一部分

最大限度地减少GPU传输(如果用到了GPU)

通过序列步长计算梯度

运行速率比python内置的for循环稍微快些

可以通过检测需要的实际内存量,来降低整体内存使用量

例子:对应元素计算tanh(x(t).dot(W) + b)
import theano
import theano.tensor as T
import numpy as np

# 定义张量变量
X = T.matrix("X")
W = T.matrix("W")
b_sym = T.vector("b_sym")

results, updates = theano.scan(lambda v: T.tanh(T.dot(v, W) + b_sym), sequences=X)
compute_elementwise = theano.function([X, W, b_sym], results)

# 测试
x = np.eye(2, dtype=theano.config.floatX)
w = np.ones((2, 2), dtype=theano.config.floatX)
b = np.ones((2), dtype=theano.config.floatX)
b[1] = 2

compute_elementwise(x, w, b)
# 和numpy相比较
np.tanh(x.dot(w) + b)
例子: 计算序列x(t) = tanh(x(t-1).dot(W) + y(t).dot(U) + p(T-t).dot(V))
import theano
import theano.tensor as T
import numpy as np
# 定义张量变量
X = T.vector("X")
W = T.matrix("W")
b_sym = T.vector("b_sym")
U, Y, V, P = T.matrices("U", "Y", "V", "P")

result, update = theano.scan(lambda y, p, x_tml: T.tanh(T.dot(x_tml, W) + T.dot(y, U) + T.dot(p, V)),
                             sequences=[Y, P[::-1]], outputs_info=[X])

compute_seq = theano.function(inputs=[X, W, Y, U, P, V], outputs=result)

# 测试
x = np.zeros((2), dtype=theano.config.floatX)
x[1] = 1
w = np.ones((2, 2), dtype=theano.config.floatX)
y = np.ones((5, 2), dtype=theano.config.floatX)
y[0, :] = -3
u = np.ones((2, 2), dtype=theano.config.floatX)
p = np.ones((5, 2), dtype=theano.config.floatX)
p[0, :] = 3
v = np.ones((2, 2), dtype=theano.config.floatX)

print(compute_seq(x, w, y, u, p, v))

# 与Numpy对比
x_res = np.zeros((5, 2), dtype=theano.config.floatX)
x_res[0] = np.tanh(x.dot(w) + y[0].dot(u) + p[4].dot(v))
for i in range(1, 5):
    x_res[i] = np.tanh(x_res[i - 1].dot(w) + y[i].dot(u) + p[4-i].dot(v))
print(x_res)
例子: 计算X的行范式
import theano
import theano.tensor as T
import numpy as np

# 定义张量变量
X = T.matrix("X")
results, updates = theano.scan(lambda x_i: T.sqrt((x_i ** 2)).sum(), sequences=[X])
compute_norm_lines = theano.function(inputs=[X], outputs=results)

# 测试
x = np.diag(np.arange(1, 6, dtype=theano.config.floatX), 1)
print(compute_norm_lines(x))

# 和Numpy对比
print(np.sqrt((x ** 2).sum(1)))
例子: 计算X的列范式
import theano
import theano.tensor as T
import numpy as np

# 定义张量变量
X = T.matrix("X")
results, updates = theano.scan(lambda x_i: T.sqrt((x_i ** 2).sum()), sequences=[X.T])
compute_norm_cols = theano.function(inputs=[X], outputs=results)

# 测试
x = np.diag(np.arange(1, 6, dtype=theano.config.floatX), 1)
print(compute_norm_cols(x))

# 和Numpy对比
print(np.sqrt((x ** 2).sum(0)))

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38660.html

相关文章

  • Deep Learning 相关库简介

    摘要:首先是最顶层的抽象,这个里面最基础的就是和,记忆中和的抽象是类似的,将计算结果和偏导结果用一个抽象类来表示了。不过,本身并没有像其它两个库一样提供,等模型的抽象类,因此往往不会直接使用去写模型。 本文将从deep learning 相关工具库的使用者角度来介绍下github上stars数排在前面的几个库(tensorflow, keras, torch, theano, skflow, la...

    ThinkSNS 评论0 收藏0
  • 测试对比TensorFlow、MXNet、CNTK、Theano四个框架

    摘要:相比于直接使用搭建卷积神经网络,将作为高级,并使用作为后端要简单地多。测试一学习模型的类型卷积神经网络数据集任务小图片数据集目标将图片分类为个类别根据每一个的训练速度,要比快那么一点点。 如果我们对 Keras 在数据科学和深度学习方面的流行还有疑问,那么考虑一下所有的主流云平台和深度学习框架的支持情况就能发现它的强大之处。目前,Keras 官方版已经支持谷歌的 TensorFlow、微软的...

    hiYoHoo 评论0 收藏0
  • 最新Github上各DL框架Star数量大PK

    摘要:下图总结了绝大多数上的开源深度学习框架项目,根据项目在的数量来评级,数据采集于年月初。然而,近期宣布将转向作为其推荐深度学习框架因为它支持移动设备开发。该框架可以出色完成图像识别,欺诈检测和自然语言处理任务。 很多神经网络框架已开源多年,支持机器学习和人工智能的专有解决方案也有很多。多年以来,开发人员在Github上发布了一系列的可以支持图像、手写字、视频、语音识别、自然语言处理、物体检测的...

    oogh 评论0 收藏0
  • 从框架优缺点说起,这是一份TensorFlow入门极简教程

    摘要:第一个主流产品级深度学习库,于年由启动。在年月日宣布,的开发将终止。张量中最基本的单位是常量变量和占位符。占位符并没有初始值,它只会分配必要的内存。是一个字典,在字典中需要给出每一个用到的占位符的取值。 为什么选择 TensorFlow?在本文中,我们将对比当前最流行的深度学习框架(包括 Caffe、Theano、PyTorch、TensorFlow 和 Keras),帮助你为应用选择最合适...

    AlphaWatch 评论0 收藏0
  • TensorFlow、MXNet、Keras如何取舍? 常用深度学习框架对比

    摘要:简称,是基于聚焦行业应用且提供商业支持的分布式深度学习框架,其宗旨是在合理的时间内解决各类涉及大量数据的问题。是负责开发的用编写,通过引擎加速的深度学习框架,是目前受关注最多的深度学习框架。 作者简介魏秀参,旷视科技 Face++ 南京研究院负责人。南京大学 LAMDA 研究所博士,主要研究领域为计算机视觉和机器学习。在相关领域较高级国际期刊如 IEEE TIP、IEEE TNNLS、Mac...

    AlphaGooo 评论0 收藏0

发表评论

0条评论

import.

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<