我在Tensorflow中制作LSTM神经网络。
输入张量大小为92。
itemArray
我没有收到任何错误,但我正在输入大小为92的输入张量,LSTM函数中的矩阵乘法返回一个包含一个结果向量的列表,当所需的量为92时,每个结果向量一个输入。
问题是我矩阵只乘以输出数组中的最后一项吗?像这样:
import tensorflow as tf
from tensorflow.contrib import rnn
import data
test_x, train_x, test_y, train_y = data.get()
# Parameters
learning_rate = 0.001
epochs = 100
batch_size = 64
display_step = 10
# Network Parameters
n_input = 28 # input size
n_hidden = 128 # number of hidden layers
n_classes = 20 # output size
# Placeholders
x = tf.placeholder(dtype=tf.float32, shape=[None, n_input])
y = tf.placeholder(dtype=tf.float32, shape=[None, n_classes])
# Network
def LSTM(x):
W = tf.Variable(tf.random_normal([n_hidden, n_classes]), dtype=tf.float32) # weights
b = tf.Variable(tf.random_normal([n_classes]), dtype=tf.float32) # biases
x_shape = 92
x = tf.transpose(x)
x = tf.reshape(x, [-1, n_input])
x = tf.split(x, x_shape)
lstm = rnn.BasicLSTMCell(
num_units=n_hidden,
forget_bias=1.0
)
outputs, states = rnn.static_rnn(
cell=lstm,
inputs=x,
dtype=tf.float32
)
output = tf.matmul( outputs[-1], W ) + b
return output
# Train Network
def train(x):
prediction = LSTM(x)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
output = sess.run(prediction, feed_dict={"x": train_x})
print(output)
train(x)
而不是:
output = tf.matmul( outputs[-1], W ) + b
这是我在做后者时得到的错误:
output = tf.matmul( outputs, W ) + b
答案 0 :(得分:0)
static_rnn用于制作最简单的递归神经网络。Here's the tf documentation。因此,它的输入应该是一系列张量。我们假设您要输入4个字呼叫"嗨","","是","您"。因此,您的输入占位符应包含对应于每个单词的四个n(每个输入向量的大小)维度向量。
我认为你的占位符存在问题。您应该使用RNN的输入数量对其进行初始化。 28是每个矢量中的维数。我相信92是序列的长度。 (更像是92 lstm细胞)
在输出列表中,您将获得等于序列长度的向量集,每个序列的大小等于隐藏单元的数量。