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

时间:2017-05-25 03:50:57

标签: tensorflow

给出等级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))

我想知道x的{​​{1}}的最后两个轴是如何使得W的结果Z形状(batch_size, max_length, n_classes)虽然不会知道batch_size在图形创建过程中,我只是为了演示目的而给它一个值

所以澄清一下:

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

以便在所有批次中共享Wb。这样做的原因是我尝试使用output tf.dynamic_rnn,其中输出的形状为(batch_size, sentence_max_length, n_hidden),并在output上构建另一个具有共享权重的图层{ {1}}和W

1 个答案:

答案 0 :(得分: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)

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