了解 Tensorflow LSTM 模型输入?
Understanding Tensorflow LSTM models input?
我在理解 TensorFlow 中的 LSTM 模型时遇到一些问题。
我用的是tflearn as a wrapper, as it does all the initialization and other higher level stuff automatically. For simplicity, let's consider this example program. Until line 42、net = tflearn.input_data([None, 200])
,结果很清楚。您将数据集加载到变量中并使其具有标准长度(在本例中为 200)。在这种情况下,输入变量和 2 类 都转换为单热向量。
LSTM 如何接受输入? 它预测输出的样本数量是多少?
net = tflearn.embedding(net, input_dim=20000, output_dim=128)
代表什么?
我的目标是replicate the activity recognition dataset in the paper。例如,我想输入一个 4096 个向量作为 LSTM 的输入,我的想法是取 16 个这样的向量,然后产生分类结果。我认为代码应该是这样的,但我不知道应该如何给出 LSTM 的输入。
from __future__ import division, print_function, absolute_import
import tflearn
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
train, val = something.load_data()
trainX, trainY = train #each X sample is a (16,4096) nd float64
valX, valY = val #each Y is a one hot vector of 101 classes.
net = tflearn.input_data([None, 16,4096])
net = tflearn.embedding(net, input_dim=4096, output_dim=256)
net = tflearn.lstm(net, 256)
net = tflearn.dropout(net, 0.5)
net = tflearn.lstm(net, 256)
net = tflearn.dropout(net, 0.5)
net = tflearn.fully_connected(net, 101, activation='softmax')
net = tflearn.regression(net, optimizer='adam',
loss='categorical_crossentropy')
model = tflearn.DNN(net, clip_gradients=0., tensorboard_verbose=3)
model.fit(trainX, trainY, validation_set=(testX, testY), show_metric=True,
batch_size=128,n_epoch=2,snapshot_epoch=True)
基本上,lstm 获取一次单元格的向量大小:
lstm = rnn_cell.BasicLSTMCell(lstm_size, forget_bias=1.0)
那么,您要提供多少个时间序列?这取决于您的喂食载体。 X_split
中数组的个数决定了时间步数:
X_split = tf.split(0, time_step_size, X)
outputs, states = rnn.rnn(lstm, X_split, initial_state=init_state)
在你的例子中,我猜 lstm_size
是 256,因为它是一个词的向量大小。 time_step_size
将是您 training/test 句子中的最大字数。
请看这个例子:https://github.com/nlintz/TensorFlow-Tutorials/blob/master/07_lstm.py
我在理解 TensorFlow 中的 LSTM 模型时遇到一些问题。
我用的是tflearn as a wrapper, as it does all the initialization and other higher level stuff automatically. For simplicity, let's consider this example program. Until line 42、net = tflearn.input_data([None, 200])
,结果很清楚。您将数据集加载到变量中并使其具有标准长度(在本例中为 200)。在这种情况下,输入变量和 2 类 都转换为单热向量。
LSTM 如何接受输入? 它预测输出的样本数量是多少?
net = tflearn.embedding(net, input_dim=20000, output_dim=128)
代表什么?
我的目标是replicate the activity recognition dataset in the paper。例如,我想输入一个 4096 个向量作为 LSTM 的输入,我的想法是取 16 个这样的向量,然后产生分类结果。我认为代码应该是这样的,但我不知道应该如何给出 LSTM 的输入。
from __future__ import division, print_function, absolute_import
import tflearn
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
train, val = something.load_data()
trainX, trainY = train #each X sample is a (16,4096) nd float64
valX, valY = val #each Y is a one hot vector of 101 classes.
net = tflearn.input_data([None, 16,4096])
net = tflearn.embedding(net, input_dim=4096, output_dim=256)
net = tflearn.lstm(net, 256)
net = tflearn.dropout(net, 0.5)
net = tflearn.lstm(net, 256)
net = tflearn.dropout(net, 0.5)
net = tflearn.fully_connected(net, 101, activation='softmax')
net = tflearn.regression(net, optimizer='adam',
loss='categorical_crossentropy')
model = tflearn.DNN(net, clip_gradients=0., tensorboard_verbose=3)
model.fit(trainX, trainY, validation_set=(testX, testY), show_metric=True,
batch_size=128,n_epoch=2,snapshot_epoch=True)
基本上,lstm 获取一次单元格的向量大小:
lstm = rnn_cell.BasicLSTMCell(lstm_size, forget_bias=1.0)
那么,您要提供多少个时间序列?这取决于您的喂食载体。 X_split
中数组的个数决定了时间步数:
X_split = tf.split(0, time_step_size, X)
outputs, states = rnn.rnn(lstm, X_split, initial_state=init_state)
在你的例子中,我猜 lstm_size
是 256,因为它是一个词的向量大小。 time_step_size
将是您 training/test 句子中的最大字数。
请看这个例子:https://github.com/nlintz/TensorFlow-Tutorials/blob/master/07_lstm.py