0

所以我正在尝试学习如何使用 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 时,即 print(theano.dot(self.W, self.WT)) 我得到 dot.0 的返回

我错过了什么?

4

2 回答 2

0

你不能只打印一个 theano 操作。有两种选择可以显示相同的结果:

首先,使用 theano.function

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

或使用 np.dot

result = numpy.dot(self.W.get_value(), self.W.get_value().T)
print result
于 2016-10-20T19:37:32.777 回答
0

在 python 中,您可以打印任何对象。所以打印子句是可以的。问题是您只能在 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()功能。

于 2016-10-21T08:05:28.780 回答