4

我已成功将 MNIST 数据集加载到 Theano 共享变量中,如下所示

# Read MNIST dataset from gzipped file as binary
f = gzip.open('mnist.pkl.gz', 'rb')
# Store dataset into variable
train_set = cPickle.load(f)
# Close zipped file
f.close()
# Store data in Theano shared variable
train_set_x = theano.shared(numpy.asarray(train_set, dtype=theano.config.floatX)) # Data
train_set_y = theano.shared(numpy.asarray(train_set, dtype=theano.config.floatX)) # Labels
# Cast labels into int
train_set_y = theano.tensor.cast(train_set_y, 'int32')

我的问题是如何访问 train_set_x 和 train_set_y 中的数据。数据集中的每张图像都是 28 * 28 像素。这是一个长度为 784 的向量,向量中的所有元素都是浮点数,表示 0.0 到 1.0 之间的值(包括 0.0 和 1.0)。标签被转换为 int 因为它表示与每个矢量图像关联的标签,并且是一个介于 0 和 9 之间的值。我希望能够遍历 train_set_x 矩阵图像和 train_set_y 标签以查看每个图像的数据及其标签分别并最终在屏幕上绘制图像。

4

2 回答 2

3

首先,train_set_xtrain_set_y (在演员表之前)train_set是同一火车集的单独副本。所以我想你把你的例子简化得太多了,就像你说的那样,那train_set_x是输入,train_set_y是相应的标签,这对代码没有意义。

您问题的答案取决于mnist.pkl.gz. 你在哪里得到它?来自深度学习教程?对于我的回答,我假设train_set是 2d numpy ndarray。这样您就可以使用mnist.pkl.gz与 DLT 不同的文件。

有了这个假设,您可以调用train_set_x.get_value(),这将返回ndarrayin 共享变量的副本。如果您不想要副本,您可以这样做train_set_x.get_value(borrow=True),这将起作用。如果共享变量在 GPU 上,这会将数据从 GPU 复制到 CPU,但如果数据已经在 CPU 上,则不会复制数据。

train_set_yTheano 图,而不是Theano 共享变量。所以你不能调用get_value()它。您需要编译并运行给出train_set_y. 如果您只想评估一次,您可以调用train_set_y.eval()它作为编译和运行它的快捷方式,因为它除了共享变量外不接受任何输入。

所以你可以这样做:

for x,y in zip(train_set_x.get_value(), train_set_y.eval()):
   print x, y
于 2013-10-21T12:59:18.563 回答
1

@Nouiz 指出了显示 train_set_x 和 train_set_y 值的正确方法。该问题与未设置的环境变量“DYLD_FALLBACK_LIBRARY_PATH”有关。我的 mac 机器上有几个 python 安装。作为 XCode 的一部分的安装。我从 python.org 安装的另一个和我从 anaconda 安装的第三个安装。在内部,只有 anaconda 的 python 能够为 theano 运行本机 c 代码。我的问题是由于我使用了其他 python 安装。我解决这个问题的方法是在我的主目录中编辑 .bash_profile 中的一些行。我指出默认版本是我使用 anaconda 安装的版本,并设置了环境变量 DYLD_FALLBACK_LIBRARY_PATH="/Users/Me/anaconda/lib"。

于 2013-10-22T10:50:24.620 回答