Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用LSTM进行迭代分类的正确方法是什么_Python_Tensorflow_Machine Learning_Neural Network_Lstm - Fatal编程技术网

Python 使用LSTM进行迭代分类的正确方法是什么

Python 使用LSTM进行迭代分类的正确方法是什么,python,tensorflow,machine-learning,neural-network,lstm,Python,Tensorflow,Machine Learning,Neural Network,Lstm,我面临着下面的问题,我想用LSTM训练RNN,用时态关系对数据进行分类,问题是我想迭代地对时间序列中的每个样本进行分类。我将举一个例子,然后解释我面临的问题 下面是一个例子:我想对计算机是否感染了恶意软件进行分类。为此,我每分钟对其进行一次采样,并获取以下特征向量:{cpu使用率,%memory use,network load}。我想基于128个样本创建时间模式,但显然我不能等待128个样本的批次被填满,我需要在得到新样本时从计算机中对样本进行分类 我的难题是如何正确地将数据输入NN并使用te

我面临着下面的问题,我想用LSTM训练RNN,用时态关系对数据进行分类,问题是我想迭代地对时间序列中的每个样本进行分类。我将举一个例子,然后解释我面临的问题

下面是一个例子:我想对计算机是否感染了恶意软件进行分类。为此,我每分钟对其进行一次采样,并获取以下特征向量:{cpu使用率,%memory use,network load}。我想基于128个样本创建时间模式,但显然我不能等待128个样本的批次被填满,我需要在得到新样本时从计算机中对样本进行分类

我的难题是如何正确地将数据输入NN并使用tensorflow进行训练。对于包含简单输入->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的样本,并将其传递给序列长度为1的
tf.nn.dynamic\u rnn
,在这种情况下,状态应该是什么?应该更新吗?我可以创建一个增量数组,它将保存最后128个并使用最后一个分类,但是,我是否应该重用上次更新的状态?为在线分类和培训保留不同的状态?我应该在每次迭代中训练模型,还是等待一整批128个样本(完全断开在线训练)


感觉有很多可能的组合,每个组合都有一定的意义,但同时与使用LSTM的“正常”方式相矛盾。

在我看来,容纳最后128个的增量数组是go@Primusathx,这也是我的最爱之一,但对我来说,国家仍然是一个悬而未决的问题。是否应在每个步骤上更新(从上次分类中获取状态)?训练中会发生什么?这完全取决于你。只要您将数据保持为(样本、时间步、特征)的形式,并且对于每个样本,您将128个时间步映射到一个输出,任何一种方法都可以工作。我会同时测试有状态和无状态。@Primusa,你说的无状态是什么意思?是否将空数组作为状态传递?