访问Theano共享变量的数据

时间:2013-10-21 08:13:20

标签: python-2.7 machine-learning computer-vision theano mnist

我已成功将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之间的值。标签被转换为int,因为它表示与每个矢量图像相关联的标签,并且是0到9之间的值。我希望能够遍历train_set_x矩阵图像和train_set_y标签以查看每个图像及其标签的数据分开并最终在屏幕上绘制图像。

2 个答案:

答案 0 :(得分: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(),这将返回共享变量中ndarray的副本。如果您不想要副本,可以执行train_set_x.get_value(borrow=True),这样就行了。如果共享变量在GPU上,则会将数据从GPU复制到CPU,但如果数据已经在CPU上,则不会复制数据。

train_set_y Theano图,而不是 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

答案 1 :(得分: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”。这解决了问题,一切都像魅力一样。