鉴于等级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的最后两个轴乘以W,使得得到的矢量Z具有形状(batch_size,max_length,n_classes)尽管在图形创建期间不会知道batch_size我刚刚给它一个值示范目的
所以澄清一下:
Z [0] = tf.matmul(x [0,:,]],W)b
这样W和b就可以在所有批次中共享.这样做的原因是我试图使用tf.dynamic_rnn的输出,其中输出的形状(batch_size,sentence_max_length,n_hidden)并在输出的顶部构建另一个具有共享权重W和b的层.
最佳答案 一种方法可能是……
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