embedding.assign(embedding_input)的解读

1.这个问题是来自Tensorboard可视化过程中
2.embedding.assign(embedding_input)这个语句的用法是什么?
简单的讲,就是把embedding_input赋值给embedding,当然这里的量全是tensor
那为什么不使用简单的embedding = embedding_input呢?
因为一般来讲,完整的式子是:
assignment = embedding.assign(embedding_input)
表达的意思是:
用被embedding_input赋值的embedding传给assignment
这一个等式完成了多种运算,根据下面我给出的比较代码可以看出,sess.run(embedding)后发现,embedding的值也变了。
这其实和我们传统意义上对tensor的操作是不同的,比如tf.reshape()或embedding.reshape()
这种类型的语句并不会改变原来tensor的shape,而是通过
embedding = embedding.reshape()的形式间接改变变量shape的。
3.embedding.assign(embedding_input)与tf.assign(embedding ,embedding_input)是等效的操作
4.最后贴上这几个的对比代码(有详解):

import tensorflow as tf
import numpy as np
# assign用法
embedding_size = 3
embedding = tf.Variable(tf.zeros([1024, embedding_size]), name="test_embedding")
embedding_input = tf.Variable(tf.constant(1.0, shape=(1024, embedding_size)))
assignment = embedding.assign(embedding_input)  # 将embedding_input赋给embedding,然后embedding间接传给了assignment
a = np.random.random(size=[1024, embedding_size])  # 建立实际feed值
sess = tf.Session()  # 建立会话
b = sess.run(assignment, feed_dict={embedding_input: a})  # 执行给b赋值的功能,注意assignment仍是tensor
print(b)
c = sess.run(embedding)
print(c)  # 说明assign的操作可以让embedding的值改变

# 换用tf.assign()也可以
embedding_size = 3
embedding = tf.Variable(tf.zeros([1024, embedding_size]), name="test_embedding")
embedding_input = tf.Variable(tf.constant(1.0, shape=(1024, embedding_size)))
assignment = tf.assign(embedding, embedding_input)  # 将embedding_input赋给embedding,然后embedding间接传给了assignment
a = np.random.random(size=[1024, embedding_size])  # 建立实际feed值
sess = tf.Session()  # 建立会话
b = sess.run(assignment, feed_dict={embedding_input: a})  # 执行给b赋值的功能,注意assignment仍是tensor
print(b)
# 如果在这里将上面的会话结束,则所有的值都会被清空
# sess.close()
c = sess.run(embedding)
print(c)  # 说明assign的操作可以让embedding的值改变

# 对比下如果是像tf.reshape的函数,会改变吗
#%%
import tensorflow as tf
embedding_size = 3
embedding = tf.zeros([1024, embedding_size], name="test_embedding")
tf.reshape(embedding, shape=(32, 32, embedding_size))
sess = tf.Session()  # 建立会话
array = sess.run(embedding)
print(array.shape)
# 实验结果表明,embedding的shape并不会变为32,32,3
#%%

# 其实直接赋值也可以
embedding_size = 3
# embedding = tf.Variable(tf.zeros([1024, embedding_size]), name="test_embedding")
embedding_input = tf.Variable(tf.constant(1.0, shape=(1024, embedding_size)))
# assignment = embedding.assign(embedding_input)  # 将embedding_input赋给embedding,然后embedding间接传给了assignment
assignment = embedding_input
a = np.random.random(size=[1024, embedding_size])  # 建立实际feed值
sess = tf.Session()  # 建立会话
b = sess.run(assignment, feed_dict={embedding_input: a})  # 执行给b赋值的功能,注意assignment仍是tensor
print(b)


5.本人现在的研究方向是:图像的语义分割,如果有志同道合的朋友,可以组队学习
haiyangpengai@gmail.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值