相关疑难解决方法(0)

仅更新Tensorflow中单词嵌入矩阵的一部分

假设我想在训练期间更新预训练的字嵌入矩阵,有没有办法只更新字嵌入矩阵的子集?

我查看了Tensorflow API页面,发现了这个:

# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)

# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)

# grads_and_vars is a list of tuples (gradient, variable).  Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1])) for gv in grads_and_vars]

# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)
Run Code Online (Sandbox Code Playgroud)

但是,我如何将其应用于字嵌入矩阵.假设我这样做:

word_emb = tf.Variable(0.2 * tf.random_uniform([syn0.shape[0],s['es']], minval=-1.0, maxval=1.0, dtype=tf.float32),name='word_emb',trainable=False)

gather_emb = tf.gather(word_emb,indices) #assuming that …
Run Code Online (Sandbox Code Playgroud)

tensorflow word-embedding

10
推荐指数
2
解决办法
3646
查看次数

使用 SparseTensor 作为可训练变量?

我正在尝试使用SparseTensor来表示全连接层中的权重变量。
但是,TensorFlow 0.8 似乎不允许将 SparseTensor 用作 tf.Variable。
有什么办法可以解决这个问题吗?

我试过了

import tensorflow as tf

a = tf.constant(1)
b = tf.SparseTensor([[0,0]],[1],[1,1])

print a.__class__  # shows <class 'tensorflow.python.framework.ops.Tensor'>
print b.__class__  # shows <class 'tensorflow.python.framework.ops.SparseTensor'>

tf.Variable(a)     # Variable is declared correctly
tf.Variable(b)     # Fail
Run Code Online (Sandbox Code Playgroud)

顺便说一下,我使用 SparseTensor 的最终目标是永久屏蔽一些密集形式的连接。因此,在计算和应用梯度时忽略这些修剪后的连接。

在我当前的 MLP 实现中,SparseTensor 及其稀疏形式的matmul ops 成功地报告了推理输出。但是,使用 SparseTensor 声明的权重不会随着训练步骤的进行而训练。

sparse-matrix neural-network tensorflow

6
推荐指数
1
解决办法
4609
查看次数