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 实例:人工神经网络
神经网络的模型可以参考 UFLDL 的教程,这里不做过多描述。
http://ufldl.stanford.edu/wiki/index.php/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
In [1]:
import theano
import theano.tensor as T
import numpy as np
from load import mnist
Using gpu device 1: Tesla K10.G2.8GB (CNMeM is disabled)
我们在这里使用一个简单的三层神经网络:输入 - 隐层 - 输出。
对于网络的激活函数,隐层用 sigmoid
函数,输出层用 softmax
函数,其模型如下:
$$ \begin{aligned} h & = \sigma (W_h X) \ o & = \text{softmax} (W_o h) \end{aligned} $$In [2]:
def model(X, w_h, w_o):
"""
input:
X: input data
w_h: hidden unit weights
w_o: output unit weights
output:
Y: probability of y given x
"""
# 隐层
h = T.nnet.sigmoid(T.dot(X, w_h))
# 输出层
pyx = T.nnet.softmax(T.dot(h, w_o))
return pyx
使用随机梯度下降的方法进行训练:
In [3]:
def sgd(cost, params, lr=0.05):
"""
input:
cost: cost function
params: parameters
lr: learning rate
output:
update rules
"""
grads = T.grad(cost=cost, wrt=params)
updates = []
for p, g in zip(params, grads):
updates.append([p, p - g * lr])
return updates
对于 MNIST
手写数字的问题,我们使用一个 784 × 625 × 10
即输入层大小为 784
,隐层大小为 625
,输出层大小为 10
的神经网络来模拟,最后的输出表示数字为 0
到 9
的概率。
为了对权重进行更新,我们需要将权重设为 shared 变量:
In [4]:
def floatX(X):
return np.asarray(X, dtype=theano.config.floatX)
def init_weights(shape):
return theano.shared(floatX(np.random.randn(*shape) * 0.01))
因此变量初始化为:
In [5]:
X = T.matrix()
Y = T.matrix()
w_h = init_weights((784, 625))
w_o = init_weights((625, 10))
模型输出为:
In [6]:
py_x = model(X, w_h, w_o)
预测的结果为:
In [7]:
y_x = T.argmax(py_x, axis=1)
模型的误差函数为:
In [8]:
cost = T.mean(T.nnet.categorical_crossentropy(py_x, Y))
更新规则为:
In [9]:
updates = sgd(cost, [w_h, w_o])
定义训练和预测的函数:
In [10]:
train = theano.function(inputs=[X, Y], outputs=cost, updates=updates, allow_input_downcast=True)
predict = theano.function(inputs=[X], outputs=y_x, allow_input_downcast=True)
训练:
导入 MNIST 数据:
In [11]:
trX, teX, trY, teY = mnist(onehot=True)
训练 100 轮,正确率为 0.956:
In [12]:
for i in range(100):
for start, end in zip(range(0, len(trX), 128), range(128, len(trX), 128)):
cost = train(trX[start:end], trY[start:end])
print "{0:03d}".format(i), np.mean(np.argmax(teY, axis=1) == predict(teX))
000 0.7028
001 0.8285
002 0.8673
003 0.883
004 0.89
005 0.895
006 0.8984
007 0.9017
008 0.9047
009 0.907
010 0.9089
011 0.9105
012 0.9127
013 0.914
014 0.9152
015 0.9159
016 0.9169
017 0.9173
018 0.918
019 0.9185
020 0.919
021 0.9197
022 0.9201
023 0.9205
024 0.9206
025 0.9212
026 0.9219
027 0.9228
028 0.9228
029 0.9229
030 0.9236
031 0.9244
032 0.925
033 0.9255
034 0.9263
035 0.927
036 0.9274
037 0.9278
038 0.928
039 0.9284
040 0.9289
041 0.9294
042 0.9298
043 0.9302
044 0.9311
045 0.932
046 0.9325
047 0.9332
048 0.934
049 0.9347
050 0.9354
051 0.9358
052 0.9365
053 0.9372
054 0.9377
055 0.9385
056 0.9395
057 0.9399
058 0.9405
059 0.9411
060 0.9416
061 0.9422
062 0.9427
063 0.9429
064 0.9431
065 0.9438
066 0.9444
067 0.9446
068 0.9449
069 0.9453
070 0.9458
071 0.9462
072 0.9469
073 0.9475
074 0.9474
075 0.9476
076 0.948
077 0.949
078 0.9497
079 0.95
080 0.9503
081 0.9507
082 0.9507
083 0.9515
084 0.9519
085 0.9521
086 0.9523
087 0.9529
088 0.9536
089 0.9538
090 0.9542
091 0.9545
092 0.9544
093 0.9546
094 0.9547
095 0.9549
096 0.9552
097 0.9554
098 0.9557
099 0.9562
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论