【问题标题】:Can I get a pointer to part of the tensor in tensorflow?我可以获得指向张量流中部分张量的指针吗?
【发布时间】:2016-07-16 07:22:35
【问题描述】:

说在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 的每一列。

【问题讨论】:

  • 您真的尝试过自己测试吗?我的猜测是切片是原始张量的视图,而不是完全不同的对象。
  • 现在我认为它只是一个张量而不是一个变量。

标签: python machine-learning tensorflow


【解决方案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)

这不是最有效的版本,但它是您在 cmets 中要求的。

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)

【讨论】:

  • 我想做的是建立一个成本函数,通过最小化它,我可以获得 C 的优化值。就像我在这里发布的问题一样,stackoverflow.com/questions/38376473/…
  • 让我知道这是否是您想要的更好的示例。
猜你喜欢
  • 2019-06-12
  • 1970-01-01
  • 2016-03-08
  • 2019-05-30
  • 2012-09-18
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 2018-04-18
相关资源
最近更新 更多