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 实例:卷积神经网络
In [1]:
import theano
import theano.tensor as T
from theano.sandbox.rng_mrg import MRG_RandomStreams as RandomStreams
import numpy as np
from load import mnist
srng = RandomStreams()
Using gpu device 1: Tesla C2075 (CNMeM is disabled)
从前一节导入有用的函数:
In [2]:
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))
def rectify(X):
return T.maximum(X, 0.)
def softmax(X):
e_x = T.exp(X - X.max(axis=1).dimshuffle(0, 'x'))
return e_x / e_x.sum(axis=1).dimshuffle(0, 'x')
def dropout(X, p=0.):
if p > 0:
retain_prob = 1 - p
X *= srng.binomial(X.shape, p=retain_prob, dtype=theano.config.floatX)
X /= retain_prob
return X
def RMSprop(cost, params, lr=0.001, rho=0.9, epsilon=1e-6):
grads = T.grad(cost=cost, wrt=params)
updates = []
for p, g in zip(params, grads):
acc = theano.shared(p.get_value() * 0.)
acc_new = rho * acc + (1 - rho) * g ** 2
gradient_scaling = T.sqrt(acc_new + epsilon)
g = g / gradient_scaling
updates.append((acc, acc_new))
updates.append((p, p - lr * g))
return updates
与前一节不同,我们使用卷积神经网络来实现这次的模型,为此,我们需要导入 2 维的卷积和池化函数:
In [3]:
from theano.tensor.nnet.conv import conv2d
from theano.tensor.signal.downsample import max_pool_2d
conv2d
函数接受两个输入:
对应输入的
4D
张量,其形状如下:[mini-batch size, number of feature maps at layer m-1, image height, image width]
对应参数矩阵的
4D
张量,其形状如下:[number of feature maps at layer m, number of feature maps at layer m-1, filter height, filter width]
为了对图像使用卷积,我们需要将图像转化为原始的 28 × 28
大小,同时添加一维表示图像的通道数(黑白图像为 1):
In [4]:
trX, teX, trY, teY = mnist(onehot=True)
trX = trX.reshape(-1, 1, 28, 28)
teX = teX.reshape(-1, 1, 28, 28)
注意,对于 reshape
方法,传入的参数是 -1
表示该维的维度将根据其他参数自动计算。
模型首先进行三层卷积加池化操作,然后在第三层的输出中加一个全连结层,最后在第四层加上一个 softmax
层:
In [5]:
def model(X, w, w2, w3, w4, p_drop_conv, p_drop_hidden):
# X: 128 * 1 * 28 * 28
# w: 32 * 1 * 3 * 3
# full mode
# l1a: 128 * 32 * (28 + 3 - 1) * (28 + 3 - 1)
l1a = rectify(conv2d(X, w, border_mode='full'))
# l1a: 128 * 32 * 30 * 30
# ignore_border False
# l1: 128 * 32 * (30 / 2) * (30 / 2)
l1 = max_pool_2d(l1a, (2, 2), ignore_border=False)
l1 = dropout(l1, p_drop_conv)
# l1: 128 * 32 * 15 * 15
# w2: 64 * 32 * 3 * 3
# valid mode
# l2a: 128 * 64 * (15 - 3 + 1) * (15 - 3 + 1)
l2a = rectify(conv2d(l1, w2))
# l2a: 128 * 64 * 13 * 13
# l2: 128 * 64 * (13 / 2 + 1) * (13 / 2 + 1)
l2 = max_pool_2d(l2a, (2, 2), ignore_border=False)
l2 = dropout(l2, p_drop_conv)
# l2: 128 * 64 * 7 * 7
# w3: 128 * 64 * 3 * 3
# l3a: 128 * 128 * (7 - 3 + 1) * (7 - 3 + 1)
l3a = rectify(conv2d(l2, w3))
# l3a: 128 * 128 * 5 * 5
# l3b: 128 * 128 * (5 / 2 + 1) * (5 / 2 + 1)
l3b = max_pool_2d(l3a, (2, 2), ignore_border=False)
# l3b: 128 * 128 * 3 * 3
# l3: 128 * (128 * 3 * 3)
l3 = T.flatten(l3b, outdim=2)
l3 = dropout(l3, p_drop_conv)
# l3: 128 * (128 * 3 * 3)
# w4: (128 * 3 * 3) * 625
# l4: 128 * 625
l4 = rectify(T.dot(l3, w4))
l4 = dropout(l4, p_drop_hidden)
# l5: 128 * 625
# w5: 625 * 10
# pyx: 128 * 10
pyx = softmax(T.dot(l4, w_o))
return l1, l2, l3, l4, pyx
定义符号变量:
In [6]:
X = T.ftensor4()
Y = T.fmatrix()
w = init_weights((32, 1, 3, 3))
w2 = init_weights((64, 32, 3, 3))
w3 = init_weights((128, 64, 3, 3))
w4 = init_weights((128 * 3 * 3, 625))
w_o = init_weights((625, 10))
使用带 dropout
的模型进行训练:
In [7]:
noise_l1, noise_l2, noise_l3, noise_l4, noise_py_x = model(X, w, w2, w3, w4, 0.2, 0.5)
使用不带 dropout
的模型进行预测:
In [8]:
l1, l2, l3, l4, py_x = model(X, w, w2, w3, w4, 0., 0.)
y_x = T.argmax(py_x, axis=1)
定义损失函数和迭代规则:
In [9]:
cost = T.mean(T.nnet.categorical_crossentropy(noise_py_x, Y))
params = [w, w2, w3, w4, w_o]
updates = RMSprop(cost, params, lr=0.001)
开始训练:
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)
for i in range(50):
for start, end in zip(range(0, len(trX), 128), range(128, len(trX), 128)):
cost = train(trX[start:end], trY[start:end])
print "iter {:03d}, {:.3f}".format(i + 1, np.mean(np.argmax(teY, axis=1) == predict(teX)))
iter 001, 0.917
iter 002, 0.974
iter 003, 0.983
iter 004, 0.984
iter 005, 0.987
iter 006, 0.989
iter 007, 0.991
iter 008, 0.993
iter 009, 0.991
iter 010, 0.992
iter 011, 0.993
iter 012, 0.992
iter 013, 0.992
iter 014, 0.992
iter 015, 0.993
iter 016, 0.992
iter 017, 0.994
iter 018, 0.993
iter 019, 0.993
iter 020, 0.994
iter 021, 0.993
iter 022, 0.993
iter 023, 0.993
iter 024, 0.992
iter 025, 0.994
iter 026, 0.993
iter 027, 0.994
iter 028, 0.993
iter 029, 0.993
iter 030, 0.994
iter 031, 0.994
iter 032, 0.993
iter 033, 0.994
iter 034, 0.994
iter 035, 0.994
iter 036, 0.994
iter 037, 0.994
iter 038, 0.993
iter 039, 0.994
iter 040, 0.994
iter 041, 0.994
iter 042, 0.994
iter 043, 0.995
iter 044, 0.994
iter 045, 0.994
iter 046, 0.994
iter 047, 0.995
iter 048, 0.994
iter 049, 0.994
iter 050, 0.995
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论