我是神经网络和Keras库的新手,我想知道如何使用here所述的嵌入层将RNN的输入数据从2D张量屏蔽为3D张量。

说我的时间序列数据如下(随着时间的增加):

X_train = [
   [1.0,2.0,3.0,4.0],
   [2.0,5.0,6.0,7.0],
   [3.0,8.0,9.0,10.0],
   [4.0,11.0,12.0,13.0],
   ...
] # with a length of 1000

现在,假设我想给RNN提供最后2个特征向量,以便预测时间t + 1的特征向量。

当前(没有嵌入层),我正在创建自己的形状为(nb_samples,timesteps,input_dim)的3D张量(如本例中的here)。

与我的示例相关,最终的3D张量将​​如下所示:
X_train_2 = [
  [[1.0,2.0,3.0,4.0],
   [2.0,5.0,6.0,7.0]],
  [[2.0,5.0,6.0,7.0],
   [3.0,8.0,9.0,10.0]],
  [[3.0,8.0,9.0,10.0],
   [4.0,11.0,12.0,13.0]],
  etc...
]

和Y_train:
Y_train = [
   [3.0,8.0,9.0,10.0],
   [4.0,11.0,12.0,13.0],
   etc...
]

我的模型如下所示(适用于上面的简化示例):
num_of_vectors = 2
vect_dimension = 4

model = Sequential()
model.add(SimpleRNN(hidden_neurons, return_sequences=False, input_shape=(num_of_vectors, vect_dimension)))
model.add(Dense(vect_dimension))
model.add(Activation("linear"))
model.compile(loss="mean_squared_error", optimizer="rmsprop")
model.fit(X_train, Y_train, batch_size=50, nb_epoch=10, validation_split=0.15)

最后,我的问题是,如何避免对自己的2D张量进行3D张量重塑,而改用Embedding层?我猜想在model = sequence()之后,我将不得不添加以下内容:
model.add(Embedding(?????))

答案可能很简单,我对嵌入层的文档感到困惑。

最佳答案

您可以按以下方式进行操作:

笔记:

  • 我生成了一些X和y作为0,只是为了让您对输入结构有所了解。
  • 如果您有多类y_train,则需要将其二值化。
  • 如果您拥有各种长度的数据,则可能需要添加填充。
  • 如果我正确地理解了在时间t + 1进行预测,那么您可能希望研究序列到序列学习。

  • 尝试类似的东西:
    hidden_neurons = 4
    nb_classes =3
    embedding_size =10
    
    X = np.zeros((128, hidden_neurons), dtype=np.float32)
    y = np.zeros((128, nb_classes), dtype=np.int8)
    
    
    model = Sequential()
    model.add(Embedding(hidden_neurons, embedding_size))
    model.add(SimpleRNN(hidden_neurons, return_sequences=False))
    model.add(Dense(nb_classes))
    model.add(Activation("softmax"))
    model.compile(loss='categorical_crossentropy', optimizer='rmsprop', class_mode="categorical")
    model.fit(X, y, batch_size=1, nb_epoch=1)
    

    关于neural-network - 如何在Keras中将嵌入层用于递归神经网络(RNN),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35089956/

    10-12 21:36