首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更新TensorFlow中的权重子集

更新TensorFlow中的权重子集
EN

Stack Overflow用户
提问于 2016-01-22 06:20:29
回答 3查看 5.7K关注 0票数 5

有人知道如何更新前向传播中使用的权重的子集(即只更新一些索引)吗?

我的猜测是,在应用compute_gradients之后,我可能可以这样做,如下所示:

代码语言:javascript
运行
复制
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
grads_vars = optimizer.compute_gradients(loss, var_list=[weights, bias_h, bias_v])

然后,...and对grads_vars中的元组列表执行一些操作。

EN

回答 3

Stack Overflow用户

发布于 2016-01-22 09:41:58

您可以使用gatherscatter_update的组合。下面是一个将位置02的值加倍的示例

代码语言:javascript
运行
复制
indices = tf.constant([0,2])
data = tf.Variable([1,2,3])
data_subset = tf.gather(data, indices)
updated_data_subset = 2*data_subset
sparse_update = tf.scatter_update(data, indices, updated_data_subset)
init_op = tf.initialize_all_variables()

sess = tf.Session()
sess.run([init_op])
print "Values before:", sess.run([data])
sess.run([sparse_update])
print "Values after:", sess.run([data])

您应该会看到

代码语言:javascript
运行
复制
Values before: [array([1, 2, 3], dtype=int32)]
Values after: [array([2, 2, 6], dtype=int32)]
票数 9
EN

Stack Overflow用户

发布于 2016-04-07 18:00:22

最简单的方法是使用npvar = sess.run(tfvar)tf.Variable拉入python (作为一个numpy数组),然后对其执行一些操作,如npvar[1, 2] = -10。然后,您可以使用sess.run(tfvar.assign(npvar))将修改后的数据上传回tensorflow。

显然,这是非常慢的,对训练没有什么用处,但它确实有效。

票数 1
EN

Stack Overflow用户

发布于 2021-07-24 17:11:15

代码语言:javascript
运行
复制
# in TF2.0 you can solve with "tensor_scatter_nd_update"
# for example:
tensor = [0, 0, 0, 0, 0, 0, 0, 0]  # tf.rank(tensor) == 1
indices = [[1], [3], [4], [7]]  # num_updates == 4, index_depth == 1
updates = [9, 10, 11, 12]  # num_updates == 4
print(tf.tensor_scatter_nd_update(tensor, indices, updates))
# tf.Tensor([ 0 9  0 10  11  0  0 12], shape=(8,), dtype=int32)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34935464

复制
相关文章

相似问题

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