Kit*_*ito 9 embedding neural-network keras recurrent-neural-network
我对神经网络和Keras库很新,我想知道如何使用这里描述的嵌入层来掩盖我的输入数据从2D张量到RNN的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
Run Code Online (Sandbox Code Playgroud)
现在,假设我想给RNN最后2个特征向量,以便预测时间t + 1的特征向量.
目前(不埋层),我创造与形状(nb_samples,时间步长,input_dim)自己所需要的三维张量(如本例这里).
与我的例子相关,最终的3D Tensor看起来如下:
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...
]
Run Code Online (Sandbox Code Playgroud)
和Y_train:
Y_train = [
[3.0,8.0,9.0,10.0],
[4.0,11.0,12.0,13.0],
etc...
]
Run Code Online (Sandbox Code Playgroud)
我的模型如下(适用于上面的简化示例):
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)
Run Code Online (Sandbox Code Playgroud)
最后,我的问题是,我怎么能避免那些2D张量到3D张量重塑我自己并使用嵌入层呢?我想在model = sequential()之后,我将不得不添加如下内容:
model.add(Embedding(?????))
Run Code Online (Sandbox Code Playgroud)
可能答案很简单,我只是对嵌入层的文档感到困惑.
小智 7
你可以这样:
注意:
我生成了一些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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8604 次 |
| 最近记录: |