tf.tile函数实例详解【TensorFlow】

例子

knowledge_matrix = tf.Variable(tf.compat.v1.keras.initializers.glorot_uniform()([num_skills, hidden_size]),dtype=tf.float32, trainable=True, name = 'knowledge_matrix')
knowledge_matrix = tf.tile(tf.expand_dims(knowledge_matrix, 0), tf.stack([batch_size, 1, 1]))#将知识矩阵沿着不同维度进行复制,以适应当前的批量大小     

说明

上述第一行即创建一个用于表示知识矩阵的 TensorFlow 变量。该矩阵的形状为 [num_skills, hidden_size],其中 num_skills 表示技能数量,hidden_size 表示隐藏层大小。

为了更好的说明tile函数,现在将num_skills设成3,hidden_size设成5,即知识矩阵是一个3x5的矩阵。

tf.expand_dims(knowledge_matrix, 0)

对于 tf.expand_dims(knowledge_matrix, 0),其中的 0 表示在张量的第 0 维(也就是最外层的维度)上进行扩展,使得原来的二维张量变成了一个三维张量。通俗的说,在执行 tf.expand_dims(knowledge_matrix, 0) 后,会在原始矩阵的外面再套一层维度,变成一个形状为 (1, 3, 5) 的三维张量。

tf.stack([batch_size, 1, 1])

把这段看成一个列表,即等价[batch_size, 1, 1],假设batch_size为10,则为[10, 1, 1],那么刚刚那个冗余的代码就可以看成是knowledge_matrix = tf.tile(tf.expand_dims(knowledge_matrix, 0), [10, 1, 1])

根据后面这个参数列表,这个参数列表也就对应了在第几个维度上复制几次,即在第一个维度上复制10次,那就是1x10,在第二和第三个维度上都只复制1次,那就是1x1。
所以最后我们得到的知识矩阵的维度就是[10,3,5].
也就是说,这个操作将原本只有知识点和知识点隐藏维度的矩阵扩展到了一个批次中对应的每个数据上,即这个批次中每一个数据都有自己对应的一个知识矩阵。
expand_dims做的是一个扩展维度的操作,但是不知道具体扩展多少维,而后面的列表才是对应维度扩展多少的数据。

以上个人理解,不喜勿喷

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值