我面临以下问题,我想用LSTM训练RNN来对数据进行时间关系分类,这就是我想迭代地对时间序列中的每个样本进行分类。我将举一个例子然后解释我面临的问题。
以下案例就是一个例子:我想分类计算机是否感染了恶意软件。为此,我每分钟对其进行一次采样并采用以下特征向量:{cpu usage,%memory use,network load}。我想基于128个样本创建时间模式,但显然我不能等待128个样本的批量填充,我需要在计算机中对样本进行分类,因为我得到了一个新样本。
我的困境在于如何正确地将数据提供给NN并使用张量流进行训练。对于包括简单输入 - > LSTM->类的NN模型:
LSTM_cells = 200
num_classes = 2
lstm_cell = rnn.BasicLSTMCell(LSTM_cells, forget_bias=1.0)
state_in = lstm_cell.zero_state(1, tf.float32)
X = tf.placeholder(tf.float32, [None, 3])
Y = tf.placeholder(tf.float32, [None, num_classes])
X = tf.reshape(X, [1, -1, 3])
rnnex_t, rnn_state = tf.nn.dynamic_rnn( \
inputs=X, cell=lstm_cell, dtype=tf.float32, initial_state=state_in)
rnnex = tf.reshape(rnnex_t, [-1, LSTM_cells])
out = tf.add(tf.matmul(rnnex, weights['out']), biases['out'])
logits = tf.reshape(out, [-1, num_classes])
prediction = tf.nn.softmax(logits)
# Define loss and optimizer
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=Y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
train_op = optimizer.minimize(loss_op)
具体来说,我可以每次创建一个长度为1的样本,并将其传递给tf.nn.dynamic_rnn
,其中sequence_length = 1,在这种情况下应该是什么状态?它应该更新吗?我可以创建一个增量数组,它将保留最后128个并使用最后一个分类,但是,我是否应该重用上次更新中的状态?保持不同的状态进行在线分类和培训?我应该在每次迭代时训练模型还是等待一整批128个样本(完全断开在线和火车的连接)?
感觉有很多可能的组合,每一种都在某种程度上有意义,但同时与使用LSTM的“正常”方式相矛盾。