对于一个项目,我想使用循环神经网络,但是我对这个主题的了解仍然有限。我确实对卷积网络和传统神经网络有一些经验。我需要预测下一步输入之一的概率分布。我的大部分序列都相对较短,其中有一些大的异常值。有足够多的数据,所以这不应该是一个问题。
我使用 Keras 来完成这项任务,使用 LSTM 或 GRU 层。
我的输入存在分类输入序列 , 和一些数值 到 . 我试图预测没有经过训练的最后一步。对于高基数分类特征,我使用嵌入层将它们映射到密集空间,然后将三种不同类型的输入合并到一个层中。我的问题是在去 softmax 层进行最后一步的 one-hot 编码预测之前将它们合并在一起。我似乎无法让输入匹配。我将较短的序列填充到 10 步加上标签,并截断较长的序列以切断开始。我已经尝试过 Graph 和 Sequential 接口。
def build_graph_model(n_A, n_B, max_length, batch_size):
g = Graph()
g.add_input(name='A', input_shape=(max_length, ), dtype='int')
g.add_node(Embedding(n_A, 32, input_length=max_length, mask_zero=True), name='embedding_A', input='A')
g.add_input(name='B', input_shape=(max_length, ), dtype='int')
g.add_node(Embedding(n_B, 32, input_length=max_length, mask_zero=True), name='embedding_B', input='B')
g.add_input(name='rest', input_shape=(max_length, 11))
g.add_node(Dense(30, activation='relu'), name='rest_dense', input='rest')
g.add_node(LSTM(100), name='lstm', inputs=['embedding_A', 'embedding_B', 'rest_dense'])
g.add_node(Dense(n_dest, activation='softmax'), name='softm', input='lstm')
g.add_output(name='output', input='softm')
g.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
这给出了错误输入维度的断言错误。如果我删除 到 事情完全可行。如果我将 Dense 层更改为 TimeDistributed(Dense) 我仍然会收到相同的错误,尽管我认为应该可以。将其余输入直接插入合并不起作用,因为合并不能是第一层。我不确定如何解决这个问题。
编辑:这个人问了同样的问题,但更简洁(https://groups.google.com/forum/#!topic/keras-users/zCuS4xdv5QY)