程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(2)

如何将词向量部分向量设置为可训练,其他不可训练

发布于2019-08-06 19:30     阅读(835)     评论(0)     点赞(5)     收藏(5)


在 tensorflow 中加载预训练的词向量时,存在一个问题,UNK 没有被训练, 如果添加 UNK 需要随机初始化,但是这样不可避免会影响精度,所以,尝试着将词向量设置成部分可训练,部分不可训练。

在写的时候想到,可以将 UNK 和 预训练的词向量分开定义,将词向量的变量设置为不可训练,UNK 设置为可训练,然后将这些变量连接起来即可。代码如下:

import tensorflow as tf

tf.reset_default_graph()
x1 = tf.Variable([1], dtype=tf.float32, trainable=False)
x2 = tf.Variable([10], dtype=tf.float32, trainable=True)
X = tf.concat([x1, x2], axis=0)

labels = [1]
logits = tf.reduce_sum(X, axis=0)
loss = tf.reduce_mean(tf.square(logits - labels))

optimizer = tf.train.AdadeltaOptimizer(0.1)
train = optimizer.minimize(loss)

sess = tf.Session()
sess.run(tf.global_variables_initializer())
print(sess.run(X))
for i in range(10000):
    _, value = sess.run([train, loss])
    if i > 9995: print(sess.run(X), value)

输出为: 

[  1.  10.]
[ 1.          8.49360371] 72.1448
[ 1.          8.49339581] 72.1413
[ 1.         8.4931879] 72.1378
[ 1.       8.49298] 72.1342

 



所属网站分类: 技术文章 > 博客

作者:3434erer

链接:https://www.pythonheidong.com/blog/article/9371/2bb9684595623568a165/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

5 0
收藏该文
已收藏

评论内容:(最多支持255个字符)