01. Python 工具
02. Python 基础
03. Numpy
- Numpy 简介
- Matplotlib 基础
- Numpy 数组及其索引
- 数组类型
- 数组方法
- 数组排序
- 数组形状
- 对角线
- 数组与字符串的转换
- 数组属性方法总结
- 生成数组的函数
- 矩阵
- 一般函数
- 向量化函数
- 二元运算
- ufunc 对象
- choose 函数实现条件筛选
- 数组广播机制
- 数组读写
- 结构化数组
- 记录数组
- 内存映射
- 从 Matlab 到 Numpy
04. Scipy
05. Python 进阶
- sys 模块简介
- 与操作系统进行交互:os 模块
- CSV 文件和 csv 模块
- 正则表达式和 re 模块
- datetime 模块
- SQL 数据库
- 对象关系映射
- 函数进阶:参数传递,高阶函数,lambda 匿名函数,global 变量,递归
- 迭代器
- 生成器
- with 语句和上下文管理器
- 修饰符
- 修饰符的使用
- operator, functools, itertools, toolz, fn, funcy 模块
- 作用域
- 动态编译
06. Matplotlib
- Pyplot 教程
- 使用 style 来配置 pyplot 风格
- 处理文本(基础)
- 处理文本(数学表达式)
- 图像基础
- 注释
- 标签
- figures, subplots, axes 和 ticks 对象
- 不要迷信默认设置
- 各种绘图实例
07. 使用其他语言进行扩展
- 简介
- Python 扩展模块
- Cython:Cython 基础,将源代码转换成扩展模块
- Cython:Cython 语法,调用其他C库
- Cython:class 和 cdef class,使用 C++
- Cython:Typed memoryviews
- 生成编译注释
- ctypes
08. 面向对象编程
09. Theano 基础
- Theano 简介及其安装
- Theano 基础
- Theano 在 Windows 上的配置
- Theano 符号图结构
- Theano 配置和编译模式
- Theano 条件语句
- Theano 循环:scan(详解)
- Theano 实例:线性回归
- Theano 实例:Logistic 回归
- Theano 实例:Softmax 回归
- Theano 实例:人工神经网络
- Theano 随机数流变量
- Theano 实例:更复杂的网络
- Theano 实例:卷积神经网络
- Theano tensor 模块:基础
- Theano tensor 模块:索引
- Theano tensor 模块:操作符和逐元素操作
- Theano tensor 模块:nnet 子模块
- Theano tensor 模块:conv 子模块
10. 有趣的第三方模块
11. 有用的工具
- pprint 模块:打印 Python 对象
- pickle, cPickle 模块:序列化 Python 对象
- json 模块:处理 JSON 数据
- glob 模块:文件模式匹配
- shutil 模块:高级文件操作
- gzip, zipfile, tarfile 模块:处理压缩文件
- logging 模块:记录日志
- string 模块:字符串处理
- collections 模块:更多数据结构
- requests 模块:HTTP for Human
12. Pandas
Theano 符号图结构
使用 Theano
,首先要定义符号变量,然后是利用这写符号变量进行计算,这些符号被称为 variables
,而操作 +, -, **, sum(), tanh()
被称为 ops
,一个 op
操作接受某些类型的输入,并返回某些类型的输出。
Theano
利用这些来构建一个图结构,一个图结构包括:
variable
节点op
节点apply
节点
其中,apply
节点用来表示一个特定的 op
作用在一些特定的 variables
上,例如:
In [1]:
import theano
import theano.tensor as T
x = T.dmatrix('x')
y = T.dmatrix('y')
z = x + y
Using gpu device 0: GeForce GTX 850M
要显示这个图结构可以用 pydotprint
,先安装 graphviz。
Windows
下:
在环境变量 path 后加上:
- path
- C:\Program Files (x86)\Graphviz2.38\bin
然后要先安装 pydot
包:
如果你的 pyparsing >= 2.0
,则将其降为 1.5.7
,下载并安装 pydot-1.0.28
。
安装完之后,找到 pydot.py
将其中:
graph.append( '%s %s {\n' % (self.obj_dict['type'], self.obj_dict['name']) )
修改为:
graph.append( '%s %s {\n' % (self.obj_dict['type'], quote_if_necessary(self.obj_dict['name'])) )
In [2]:
theano.printing.pydotprint(z, outfile='https://www.wenjiangs.com/wp-content/uploads/2022/09/apply1.png', var_with_name_simple=True)
The output file is available at https://www.wenjiangs.com/wp-content/uploads/2022/09/apply1.png
它的图结构如下:
z
的 owner
是一个 apply
结构,其 op
为:
In [3]:
z.owner.op.name
Out[3]:
'Elemwise{add,no_inplace}'
这个 apply
结构的输入值有两个,输出值有一个:
In [4]:
print z.owner.nin
print z.owner.nout
2
1
查看它的输入:
In [5]:
z.owner.inputs
Out[5]:
[x, y]
我们可以用 pprint 来显示它:
In [6]:
print theano.printing.pprint(z)
(x + y)
用 debugprint
显示图结构:
In [7]:
theano.printing.debugprint(z)
Elemwise{add,no_inplace} [@A] ''
|x [@B]
|y [@C]
再看另一个稍微复杂的例子:
In [8]:
y = x * 2
查看 y
的图谱:
In [9]:
theano.printing.debugprint(y)
Elemwise{mul,no_inplace} [@A] ''
|x [@B]
|DimShuffle{x,x} [@C] ''
|TensorConstant{2} [@D]
这里我们看到,y
对应的第二个 input
并不是 2
,而是一个 DimShuffle
的操作:
In [10]:
y.owner.inputs[1].owner.op
Out[10]:
<theano.tensor.elemwise.DimShuffle at 0x1b816390>
它的输入才是常数 2:
In [11]:
y.owner.inputs[1].owner.inputs
Out[11]:
[TensorConstant{2}]
In [12]:
theano.printing.pydotprint(y, outfile='https://www.wenjiangs.com/wp-content/uploads/2022/09/apply2.png', var_with_name_simple=True)
The output file is available at https://www.wenjiangs.com/wp-content/uploads/2022/09/apply2.png
其图结构为
function 对图的优化
In [13]:
a = T.dscalar('a')
b = a + a ** 10
f = theano.function([a], b)
In [14]:
theano.printing.pydotprint(b, outfile='https://www.wenjiangs.com/wp-content/uploads/2022/09/apply_no_opti.png', var_with_name_simple=True)
theano.printing.pydotprint(f, outfile='https://www.wenjiangs.com/wp-content/uploads/2022/09/apply_opti.png', var_with_name_simple=True)
The output file is available at https://www.wenjiangs.com/wp-content/uploads/2022/09/apply_no_opti.png
The output file is available at https://www.wenjiangs.com/wp-content/uploads/2022/09/apply_opti.png
比较一下 function
函数对图结构进行的优化:
未优化前:
优化后:
图结构的作用
- 计算按照图结构来计算
- 优化,求导
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论