Theano操作返回奇怪的结果

时间:2016-10-19 23:55:49

标签: python numpy theano nnet

所以我试图学习如何使用Theano并专门用于神经网络。 我在Windows 10系统上,使用mingw64和安装页面中的所有其他所需文件(除了microsoft visual studio和cuda,因为我不打算使用我的GPU)。 一切似乎都有效,婴儿步骤"本教程的一部分工作正常。 但是,当我尝试运行以下代码时,我得到一些奇怪的结果 -

self.W = theano.shared(value=np.random.standard_normal((state_dim, 4*state_dim)) * np.sqrt(2 / in_dim), name='W', borrow=True)
print(theano.dot(self.W.get_value(), self.W.get_value().T)

出现以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\mingw64\WinPython-64bit-3.4.4.4Qt5\python-3.4.4.amd64\lib\site-packages\theano\__init__.py", line 172, in dot
    (e0, e1))
NotImplementedError: ('Dot failed for the following reasons:', (None, None))

当我尝试在没有get_value()的情况下引用W,即     打印(theano.dot(self.W,self.W.T)) 我得到 dot.0 的返回值。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

You can't just print a theano operation. There are two alternatives to show the same result:

first, using theano.function

result = theano.dot(self.W, self.W.T)
f = theano.function([],result)
print f()

or using np.dot

result = numpy.dot(self.W.get_value(), self.W.get_value().T)
print result

答案 1 :(得分:0)

在python中你可以打印任何对象。所以print子句没问题。 问题是你只能在theano表达式中使用符号变量。您不能直接在theano表达式中使用值。 所以你的代码可以写成:

self.W = theano.shared(value=np.random.standard_normal((state_dim, 4*state_dim)) * np.sqrt(2 / in_dim), name='W', borrow=True)
print(theano.dot(self.W, self.W.T)

只需删除get_value()功能。