首页 文章

如何在Keras中构建一个递归神经网络,其中每个输入首先通过一个层?

提问于
浏览
2

我正在尝试在Keras中构建一个看起来像这样的神经网络:

enter image description here

其中x_1,x_2,...是经历相同变换f的输入向量 . f本身就是一个必须学习参数的层 . 序列长度n在实例之间是可变的 .

我在这里理解两件事情有困难:

  • What should the input look like?
    我知道这对我有帮助吗?

  • How do I pass each input vector through the same transformation before feeding it to the RNN layer?
    有没有办法扩展例如GRU,以便在通过实际的GRU单元之前添加f层?

1 回答

  • 0

    我不是专家,但我希望这有帮助 .

    Question 1:

    向量x1,x2 ... xn可以有不同的形状,但我不确定x1的实例是否可以有不同的形状 . 当我有不同的形状时,我通常用0来填充短序列 .

    Question 2:

    我不确定扩展GRU,但我会做这样的事情:

    x_dims = [50, 40, 30, 20, 10]
    n = 5
    
    
    def network():
    
        shared_f = Conv1D(5, 3, activation='relu')
        shated_LSTM = LSTM(10)
    
        inputs = []
        to_concat = []
        for i in range(n):
            x_i = Input(shape=(x_dims[i], 1), name='x_' + str(i))
            inputs.append(x_i)
            step1 = shared_f(x_i)
            to_concat.append(shated_LSTM(step1))
    
        merged = concatenate(to_concat)
    
        final = Dense(2, activation='softmax')(merged)
    
        model = Model(inputs=inputs, outputs=[final])
        # model = Model(inputs=[sequence], outputs=[part1])
    
        model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
    
        return model
    
    m = network()
    

    在这个例子中,我使用Conv1D作为共享 f 转换,但你可以使用其他东西(嵌入等) .

相关问题