Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/314.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 如何使用Keras为可变大小的块创建LSTM?_Python_Keras_Lstm_Keras Layer - Fatal编程技术网

Python 如何使用Keras为可变大小的块创建LSTM?

Python 如何使用Keras为可变大小的块创建LSTM?,python,keras,lstm,keras-layer,Python,Keras,Lstm,Keras Layer,我正在尝试使用Keras创建一个LSTM,但我正在努力进行布局。基本上我有几个时间块,每个时间块都有数量可变的数组,每个数组的大小都是3。以下是这方面的示意图: |-时间块-|--数组1-|--数组2-|--数组3-| |—————————————————————————————————————————————————— |—————————————————————————————————— |———————————————————————————————————————————————————

我正在尝试使用Keras创建一个LSTM,但我正在努力进行布局。基本上我有几个时间块,每个时间块都有数量可变的数组,每个数组的大小都是3。以下是这方面的示意图:
|-时间块-|--数组1-|--数组2-|--数组3-|
|—————————————————————————————————————————————————— |—————————————————————————————————— |———————————————————————————————————————————————————— ...
每个时间块只是序列中的一个元素,每个时间块中的数组的顺序是任意的(它们彼此不对应,如果它们的顺序不同,应该没有区别)
此输入的输出应该是一个数组,每个3向量都有1或0,例如:[[3,4,2],[2,3,4]],[[1,3,4]]->[[1,0],[1]]
下面是我提出的,但它是非常错误的

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
model = Sequential()
# fixed feature size of 3, unknown number of vectors
model.add(LSTM(64, input_dim=3, input_length=None, return_sequences=True))
model.add(Dropout(0.5))
model.add(LSTM(64, return_sequences=True))
model.add(Dropout(0.5))
# number of outputs is the (previously unknown) number of vectors
model.add(Dense(None, activation='sigmoid')) # obviously this is incorrect...

# Example training phase:
model.compile(optimizer='rmsprop', loss='mean_squared_error', \
    metrics=['accuracy'])
x_train = [np.array([[1, 2, 3], [4,5,6]]), \
           np.array([[4, 1, 4], [1, 1, 5], [3, 2, 1]]), \
           np.array([[3, 2, 1], [2, 3, 2]]), \
           np.array([[7, 4, 3], [2, 6, 4], [2, 5, 7], [3, 8, 5]])]
y_train = [np.array([0, 0]), np.array([0, 1, 0]), \
    np.array([1, 1, 0]), np.array([0, 0, 0, 1])]
model.fit(x_train, y_train, epochs=2000, batch_size=3)
# Testing/evaluating phase would be similar to the above

以上是我的主要问题。此外,在我的培训数据中,由于数据非常不平衡,1远多于0——几乎是2500:1的比例(这是现实生活中的比例,因此收集更多数据不会改变这一点)。如果这是一个前馈网络,我可以消除一些对应于0的数据来平衡它(通过欠采样)。显然,我不能用LSTM实现这一点——那么我应该如何训练模型来解释不平衡的类呢?

我不明白,如果同一时间块下的数组是不相关的,为什么要用LSTM呢?“我看不出这有什么意义。”阿尼斯,让我解释一下我的问题。我有一个随时间变化的节点图,对于每个节点,我提取3个特征。每隔x秒,我提取所有节点的特征。请注意,尽管以前的许多节点仍在图中,但有些是新的,有些是旧的。我正在搜索异常节点,我的想法是,如果我们检测到一些随时间的变化(因此是LSTM),它们将更容易找到。