【发布时间】:2017-05-25 19:35:11
【问题描述】:
我刚刚在 Theano 中实现了一个高斯内核。但是,当我将它作为神经网络的一部分进行测试时,它需要的时间太长了。似乎内核减法没有并行化。网络的整个训练使用单个处理核心。那么,如何正确诱导 Theano 拆分内核操作呢?
import theano.tensor as T
import numpy
import theano
batch_s=5
dims=10
hidd_s=3
out_s=2
missing_param = None #"ignore"
rng = numpy.random.RandomState(1234)
input = T.matrix("input")
X = numpy.asarray(rng.uniform(low=-2.1, high=5.0, size=(batch_s, dims)))
def layer(x):
W=theano.shared(
value=numpy.asarray(
rng.uniform(low=0.001, high=1.0, size=(dims, hidd_s)),
dtype=theano.config.floatX),
name='W', borrow=True)
S=theano.shared(
value=numpy.asarray(
rng.uniform(low=10.0, high=100.0, size=(hidd_s, )),
dtype=theano.config.floatX),
name='S', borrow=True)
dot_H = theano.shared(
value=numpy.zeros((batch_s, hidd_s),
dtype=theano.config.floatX),
name='dot_H', borrow=True)
# This is the kernel operation. I have tested with single scan as well
# as with two nested scans, but operations arenot splitted as in the
# case of the usual dot product T.dot().
for i in range(batch_s):
for j in range(hidd_s):
dot_H = T.set_subtensor(dot_H[i,j],
T.exp(-(W.T[j] - x[i]).norm(2) ** 2) / 2 * S[j] ** 2)
return dot_H
layer_out = theano.function(
inputs=[input],
outputs=layer(input),
on_unused_input=missing_param
)
print layer_out(X)
非常感谢。
【问题讨论】:
-
如果你正在构建一个神经网络,你可以试试Intel Theano,它在 CPU 中会非常快,并带有优化的卷积、relu 和其他原语。
标签: python neural-network deep-learning theano theano.scan