首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow优化器对某些指数的抗议

Tensorflow优化器对某些指数的抗议
EN

Stack Overflow用户
提问于 2018-02-15 07:24:57
回答 1查看 105关注 0票数 0

我有以下图表网络:

代码语言:javascript
复制
initia = tf.zeros_initializer
I = tf.placeholder(tf.float32, shape=[None,1], name='I') # input
W = tf.get_variable('W', shape=[1,DEPTH], initializer=initia, dtype=tf.float32) # weights
b = tf.get_variable('b', shape=[DEPTH], initializer=initia, dtype=tf.float32) # biases
O = tf.nn.relu(tf.matmul(I, W) + b, name='O')
O_0 = tf.gather_nd(O, [0,0])
W_1 = tf.gather_nd(W, [0,1])
distance = tf.square( O_0 - W_1 )
train_op = tf.train.GradientDescentOptimizer(1e-4).minimize(distance)

此错误失败:

ValueError:形状必须至少为1级,但对于输入形状为2、[]、2的渐变/GatherNd_3 grad/ScatterNd‘(op:'ScatterNd')为0级。

我尝试将距离标量嵌入到一个1-昏暗张量中,但是它给出了一个类似的错误:

代码语言:javascript
复制
train_op = tf.train.GradientDescentOptimizer(1e-4).minimize(tf.stack([distance]))

你知道上面的图有什么问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-15 20:08:02

如果修改indices参数,使其成为单个元素位置的列表

代码语言:javascript
复制
O_0 = tf.gather_nd(O, [[0, 0]]) # if DEPTH is 2
W_1 = tf.gather_nd(W, [[0, 1]])

它将很好地工作:

代码语言:javascript
复制
DEPTH=2

initia = tf.zeros_initializer
I = tf.placeholder(tf.float32, shape=[None,1], name='I') # input
W = tf.get_variable('W', shape=[1,DEPTH], initializer=initia, dtype=tf.float32) # weights
b = tf.get_variable('b', shape=[DEPTH], initializer=initia, dtype=tf.float32) # biases
O = tf.nn.relu(tf.matmul(I, W) + b, name='O')
O_0 = tf.gather_nd(O, [[0,0]])
W_1 = tf.gather_nd(W, [[0, 1]])
distance = tf.square( O_0 - W_1 )
train_op = tf.train.GradientDescentOptimizer(1e-4).minimize(distance)


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print(sess.run(train_op, {I: [[1], [2], [3]]}))

您可以在文档中找到有关indices参数的更多信息:

params切片收集到由indices指定的形状的张量中。 indices是一个K维整数张量,最好被认为是params中索引的(K-1)-dimensional张量,其中每个元素定义了params的一个片段:

代码语言:javascript
复制
  output[i_0, ..., i_{K-2}] = params[indices[i0, ..., i_{K-2}]]

在@{tf.gather} indices中,将切片定义为params的第一个维度,而在tf.gather_nd中,indices定义了params的第一个N维度的切片,其中N = indices.shape[-1]indices的最后一个维度最多可以是params的级别:

代码语言:javascript
复制
  indices.shape[-1] <= params.rank

indices的最后一个维度对应于元素(如果是indices.shape[-1] == params.rank)或切片(如果是indices.shape[-1] < params.rank)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48801893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档