我可以在tensorflow中获得指向张量部分的指针吗?

时间:2016-07-14 15:02:03

标签: python machine-learning tensorflow

在tensorflow中说,我通过

创建了一个变量

C = tf.Variable(tf.random_uniform([n_sample, n_sample], -1, 1), name='C')

现在我想得到一个指向变量第一列的指针,无论如何我能做到吗? tf.slice(C, [0,0], [n_sample,1])会给我我想要的内容,或者只会创建另一个值C存储的变量。

我想这样做的原因是因为我的优化功能依赖于C和C的每一列。

1 个答案:

答案 0 :(得分:1)

据我所知,你无法真正访问数据本身(例如指针)。原因是代码将与数据无关,因此它可以将数据传递到不同的CPU或GPU而无需担心该部分(或者您可以指定要使用的设备,但这会很麻烦)。

因此tf.slice将是正确使用的函数。

你可以这样做:

for i in range(n_sample):
    curr_slice = tf.slice(C, [i,0], [n_sample,1])
    do_something(curr_slice)

这不是最有效的版本,但它是你在评论中要求的。

for i inVectorized range(n_sample):approach
curr_sliceloss = tf.slice(C, [i,0], [n_sample,1])
y.assign_add( tf.nn.l2_loss(tf.sub(curr_slice,X - tf.matmul(X,curr_slice)C)) + lambdalamb * tf.nn.l2_loss(curr_slice) C)

loss=tf.reduce_sum(y)

矢量化方法更清洁:

loss = tf.nn.l2_loss(X - tf.matmul(X,C)) + lamb * tf.nn.l2_loss(C)

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)       
sess.run(train_step)

您可能需要通过创建占位符来初始化某些值。 或者我在skflow中找不到它,但在scikit中学习它是一个简单的3班轮。

from sklearn.linear_model import Ridge
clf = Ridge(alpha=1.0)
clf.fit(X, W)