首页 文章

在Tensorflow中将秩3张量乘以秩2张量

提问于
浏览
4

鉴于等级3张量:

sentence_max_length = 5
batch_size = 3
n_hidden = 10
n_classes = 2
x = tf.constant(np.reshape(np.arange(150),(batch_size,sentence_max_length, n_hidden)), dtype = tf.float32)

并且等级2张量:

W = tf.constant(np.reshape(np.arange(20), (n_hidden, n_classes)), dtype = tf.float32)

并且排名1偏差张量:

b = tf.constant(np.reshape(np.arange(5), (n_classes), dtype = tf.float32))

我想知道 W 的最后两个轴是如何产生的,所以得到的矢量 Z 将是形状 (batch_size, max_length, n_classes) 尽管在图形创建过程中不会知道batch_size我在这里为了演示目的而给它一个值

所以澄清一下:

Z[0] = tf.matmul(x[0,:,:], W) + b

这样所有批次共享 Wb . 这样做的原因是我试图使用 tf.dynamic_rnntf.dynamic_rnn ,其中输出的形状为 (batch_size, sentence_max_length, n_hidden) ,并在 output 上构建另一层,其共享权重 Wb .

1 回答

  • 1

    一种方法可能是......

    import tensorflow as tf
    import numpy as np
    from tensorflow.python.layers.core import Dense
    
    sentence_max_length = 5
    batch_size = 3
    n_hidden = 10
    n_classes = 2
    x = tf.constant(np.reshape(np.arange(150),(batch_size,sentence_max_length, n_hidden)), dtype = tf.float32)
    
    linear_layer = Dense(n_classes, use_bias=True) #required projection value
    z = linear_layer(x)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
        res = sess.run(z)
    
    res.shape
    (3, 5, 2)
    

    在内部,Dense层创建可训练的W&b变量 . 并且,它使用standard_ops.tensordot操作将最后一个维度转换为预计值 . 有关更多详细信息,请参阅此处的源代码 . https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/python/layers/core.py

相关问题