- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想使用 Theano 在 MNIST 上通过小批量实现逻辑回归。我想尝试不同的优化器,所以我决定使用一个名为 climin 的库. Climin 提供了几个函数,它们接收模型的参数、损失和/或损失的梯度,以及数据流作为参数。由于需要编译 theano 函数,我设计了以下模型。
# loads the MNIST dataset
train_set_x, train_set_y = load_data(dataset)[0]
print('... building the model')
W = theano.shared(
value = np.zeros((28 * 28, 10), dtype = theano.config.floatX),
name = 'W',
borrow = True
) # weights dimension 28 * 28, 10
b = theano.shared(
value = np.zeros((10,), dtype = theano.config.floatX),
name = 'b',
borrow = True
) # biases
x = T.matrix('x') # data, represented as rasterized images dimension 28 * 28
y = T.ivector('y') # labes, represented as 1D vector of [int] labels dimension 10
p_y_given_x = T.nnet.softmax(T.dot(x, W) + b)
y_pred = T.argmax(p_y_given_x, axis=1)
NLL = -T.sum(T.log(p_y_given_x)[T.arange(y.shape[0]), y])
# negative_log_likelihood = -T.mean(T.log(y_pred)[T.arange(y.shape[0]), y])
loss = theano.function(inputs = [ x, y ], outputs = NLL )
g_W = theano.function(inputs = [ x, y ], outputs = T.grad(cost=loss, wrt=W))
g_b = theano.function(inputs = [ x, y ], outputs = T.grad(cost=loss, wrt=b))
def d_loss_wrt_pars(parameters, inputs, targets):
# climin passes the parametes
# as 1-D concatinated array to
# this function so I need to
# unpack the parameter array
W = parameters[:28 * 28 * 10].reshape((28 * 28, 10))
b = parameters[28 * 28 * 10:].reshape((1, 10))
return np.concatinate([g_W(x, y).flatten(), g_b(x, y)])
wrt = np.empty(7850) # allocate space for the parameters (MNIST dimensionality 28 * 28 * 10)
cli.initialize.randomize_normal(wrt, 0, 1) # initialize the parameters with random numbers
if batch_size is None:
args = itertools.repeat(([train_set_x, train_set_y], {}))
batches_per_pass = 1
else:
args = cli.util.iter_minibatches([train_set_x, train_set_y], batch_size, [0, 0])
args = ((i, {}) for i in args)
batches_per_pass = train_set_x.shape[0] / batch_size
if optimizer == 'gd':
opt = cli.GradientDescent(wrt, d_loss_wrt_pars, step_rate=0.1, momentum=.95, args=args)
else:
print('unknown optimizer')
return 1
print('... training the model')
for info in opt:
if info['n_iter'] >= n_epochs and (not done_looping):
break
不幸的是,这只会产生:
Traceback (most recent call last):
File "logreg/logistic_sgd.py", line 160, in <module> sys.exit(sgd_optimization_mnist())
File "logreg/logistic_sgd.py", line 69, in sgd_optimization_mnist
g_W = theano.function(inputs = [ x, y ], outputs = T.grad(cost=loss, wrt=W))
File "/Users/romancpodolski/anaconda/lib/python2.7/site-packages/theano/gradient.py", line 430, in grad
if cost is not None and isinstance(cost.type, NullType):
AttributeError: 'Function' 对象没有属性 'type'
任何人都知道如何使这项工作和结合这两个库?
最佳答案
您的代码将编译后的函数(而不是 Theano 表达式)传递给 T.grad
。将 loss
替换为 NLL
就可以了
g_W = theano.function(inputs = [ x, y ], outputs = T.grad(cost=NLL, wrt=W))
g_b = theano.function(inputs = [ x, y ], outputs = T.grad(cost=NLL, wrt=b))
此外,您可能想尝试使用支持 Theano 的库(例如 Lasagne )进行优化。
关于python - 使用 Climin 在 Theano 中实现逻辑回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36742032/
如何通过索引向量在 Theano 中索引矩阵? 更准确地说: v 的类型为 theano.tensor.vector(例如 [0,2]) A 具有 theano.tensor.matrix 类型(例如
我是theano的新手。我正在尝试实现简单的线性回归,但我的程序抛出以下错误: TypeError: ('Bad input argument to theano function with name
我有一个被多次调用的 Theano 函数,每次都使用不同的共享变量。按照现在的实现方式,Theano 函数在每次运行时都会重新定义。我假设,这会使整个程序变慢,因为每次定义 Theano 函数时,都会
我正在阅读http://deeplearning.net/tutorial/logreg.html给出的逻辑函数代码。我对函数的inputs和givens变量之间的区别感到困惑。计算微型批次中的模型所
我是 Theano 的新手。 尝试设置配置文件。 首先,我注意到我没有 .theanorc 文件: locate .theanorc - 不返回任何内容 echo $THEANORC - 不返回任何内
我不明白为什么我们在 Theano 中需要 tensor.reshape() 函数。文档中说: Returns a view of this tensor that has been reshaped
给定一个张量 v = t.vector(),我该如何翻转它?例如,[1, 2, 3, 4, 5, 6] 翻转后是 [6, 5, 4, 3, 2, 1]。 最佳答案 您可以简单地执行 v[::-1].e
我是 Theano 的新手,正在尝试一些示例。 import numpy import theano.tensor as T from theano import function import da
出于诊断目的,我定期获取网络的梯度。一种方法是将梯度作为 theano 函数的输出返回。然而,每次都将梯度从 GPU 复制到 CPU 内存可能代价高昂,所以我宁愿只定期进行。目前,我通过创建两个函数对
我阅读了网络上所有关于人们忘记将目标向量更改为矩阵的问题的帖子,由于更改后问题仍然存在,我决定在这里提出我的问题。下面提到了解决方法,但出现了新问题,我感谢您的建议! 使用卷积网络设置和带有 sigm
我需要通过扫描多次执行 theano 函数,以便总结成本函数并将其用于梯度计算。我熟悉执行此操作的深度学习教程,但我的数据切片和其他一些复杂情况意味着我需要做一些不同的事情。 下面是我正在尝试做的一个
我正在尝试学习(和比较)不同的深度学习框架,到时候它们是 Caffe 和 Theano。 http://caffe.berkeleyvision.org/gathered/examples/mnist
下面的代码: import theano import numpy as np from theano import tensor as T h1=T.as_tensor_variable(np.ze
我发现 Theano/Lasagne 的所有示例都处理像 mnist 和 cifar10 这样的小数据集,它们可以完全加载到内存中。 我的问题是如何编写高效的代码来训练大规模数据集?具体来说,为了让
我正在做图像分类,我必须检测图像是否包含飞机。 我完成了以下步骤: 1. 从图像数据集中提取特征作为描述符 2. 用 K 完成 - 表示聚类并生成描述符语料库 3.将语料数据在0-1范围内归一化并保存
一些简单的 theano 代码完美运行,当我导入 pymc3 时停止运行 为了重现错误,这里有一些片段: #Initial Theano Code (this works) import the
我在做this对于 NumPy 。 seq 是一个带有索引的列表。 IE。这实现了 1-of-k 编码(也称为 one-hot)。 def 1_of_k(seq, num_classes): nu
Keras 将数据批量加载到 GPU 上(作者注明here)。 对于小型数据集,这是非常低效的。有没有办法修改 Keras 或直接调用 Theano 函数(在 Keras 中定义模型之后)以允许将所有
Theano导入失败,theano配置cnmem = 1 知道如何确保 GPU 完全分配给 theano python 脚本吗? Note: Display is not used to avoid
例如,我可以定义一个递归 Python lambda 函数来计算斐波那契数列,如下所示: fn = lambda z: fn(z-1)+fn(z-2) if z > 1 else z 但是,如果我尝试
我是一名优秀的程序员,十分优秀!