Python 2.7 访问Theano共享变量的数据

Python 2.7 访问Theano共享变量的数据,python-2.7,machine-learning,computer-vision,theano,mnist,Python 2.7,Machine Learning,Computer Vision,Theano,Mnist,I'v成功地将MNIST数据集加载到无共享变量中,如下所示 # 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_se

I'v成功地将MNIST数据集加载到无共享变量中,如下所示

# 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\u set\u x矩阵图像和train\u set\u y标签上循环,以分别查看每个图像及其标签的数据,并最终在屏幕上绘制图像。

首先,
train\u set\u x
train\u set\u y
(在播放之前)和
train\u set
是同一列车组的单独副本。因此,我认为您过于简化了示例,因为您说,
train\u set\u x
是输入,
train\u set\u y
是相应的标签,这对代码没有意义

您问题的答案取决于
mnist.pkl.gz
的内容。你从哪儿弄来的?来自深度学习教程?对于我的答案,我假设
train\u set
是一个2d numpy
ndarray
。因此,您可以使用不同的
mnist.pkl.gz
文件,然后使用DLT中的文件

通过该假设,您可以调用
train\u set\u x.get\u value()
,这将返回共享变量中
ndarray
的副本。如果您不需要副本,您可以执行
训练集\u x.获取值(借用=True)
,这将起作用。如果共享变量位于GPU上,则会将数据从GPU复制到CPU,但如果数据已经位于CPU上,则不会复制数据

train\u set\u y
是一个无图,而不是无共享变量。因此,您不能对其调用
get\u value()
。您需要编译并运行提供
train\u set\u y
的图形。如果只想计算一次,可以调用
train\u set\u y.eval()
作为编译和运行它的快捷方式,因为它不接受除共享变量以外的任何输入

所以你可以这样做:

for x,y in zip(train_set_x.get_value(), train_set_y.eval()):
   print x, y

@努伊兹指出了显示列集合x和列集合y值的正确方法。问题与未设置的环境变量“DYLD\u FALLBACK\u LIBRARY\u PATH”有关。 我在我的mac电脑上安装了一些python。作为XCode的一部分存在的安装。另一个是我从python.org安装的,第三个是我从anaconda安装的。在内部,只有anaconda的python能够为theano运行本机c代码。我的问题是由于我使用了其他python安装。
我解决这个问题的方法是在我的主目录中编辑.bash_配置文件中的一些行。我将默认版本指定为与anaconda一起安装的版本,并设置了环境变量DYLD_FALLBACK_LIBRARY_PATH=“/Users/Me/anaconda/lib”。这就解决了问题,一切都很顺利。

是的!我确实从深度学习教程中获得了mnist.pkl.gz。pickle文件表示由3个列表组成的元组:培训集、验证集和测试集。三个列表中的每一个都是由图像列表和每个图像的类标签列表组成的一对。图像表示为0到1(0代表黑色,1代表白色)之间784(28 x 28)个浮点值的numpy一维数组。标签是介于0和9之间的数字,表示图像所代表的数字。你说得对!所有变量都是同一原始序列集的副本。根据教程,我可以使用索引分离数据。我还试着运行train_set_x.get_value(borrow=True)和get并得到一个二维零数组。当我尝试计算train_set_y.eval()时,我得到AttributeError:“TensorVariable”对象没有属性“eval”@moeabdol,该错误是由于您的Theano版本太旧。更新至Theano 0.6rc3