假设我们有一个变量:
x = tf.Variable(...)
Run Code Online (Sandbox Code Playgroud)
可以在训练过程中使用该assign()方法更新此变量.
获取变量当前值的最佳方法是什么?
我知道我们可以用这个:
session.run(x)
Run Code Online (Sandbox Code Playgroud)
但我担心这会触发一整套操作.
在Theano,你可以做到
y = theano.shared(...)
y_vals = y.get_value()
Run Code Online (Sandbox Code Playgroud)
我在TensorFlow中寻找相同的东西.
假设我们有权重
x = tf.Variable(np.random.random((5,10)))
cost = ...
Run Code Online (Sandbox Code Playgroud)
我们使用GD优化器:
upds = tf.train.GradientDescentOptimizer(lr).minimize(cost)
session.run(upds)
Run Code Online (Sandbox Code Playgroud)
我们如何实施例如权重的非负性?
我试着剪掉它们:
upds = tf.train.GradientDescentOptimizer(lr).minimize(cost)
session.run(upds)
session.run(tf.assign(x, tf.clip_by_value(x, 0, np.infty)))
Run Code Online (Sandbox Code Playgroud)
但这会使我的训练减慢50倍.
有人知道在TensorFlow中对权重实施这种约束的好方法吗?
PS:在等效的Theano算法中,我有
T.clip(x, 0, np.infty)
Run Code Online (Sandbox Code Playgroud)
它运行顺利.
在numpy中,我们可以这样做:
x = np.random.random((10,10))
a = np.random.randint(0,10,5)
b = np.random.randint(0,10,5)
x[a,b] # gives 5 entries from x, indexed according to the corresponding entries in a and b
Run Code Online (Sandbox Code Playgroud)
当我在TensorFlow中尝试相同的东西时:
xt = tf.constant(x)
at = tf.constant(a)
bt = tf.constant(b)
xt[at,bt]
Run Code Online (Sandbox Code Playgroud)
最后一行给出"Bad slice index tensor"异常.似乎TensorFlow不支持像numpy或Theano这样的索引.
有没有人知道是否有TensorFlow方法这样做(用任意值索引张量).我已经看过tf.nn.embedding部分了,但是我不确定它们是否可以用于此,即使它们可以,但对于这种简单的事情来说,这是一个巨大的解决方法.
(现在,我正在将数据x作为输入提供并在numpy中进行索引,但我希望将其放入xTensorFlow以获得更高的效率)