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

Neural network 如何在Keras中构建一个递归神经网络,其中每个输入首先经过一层?,neural-network,deep-learning,keras,recurrent-neural-network,rnn,Neural Network,Deep Learning,Keras,Recurrent Neural Network,Rnn,我正试图在Keras中建立一个神经网络,看起来像这样: 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

我正试图在Keras中建立一个神经网络,看起来像这样:

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()

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

我很难理解这里的两件事:

  • 输入应该是什么样子?
    我考虑的是一个具有形状的二维张量(输入的数量,x维),其中x维是单个向量的长度$x$。这样的二维张量可以有一个可变的形状吗?我知道张量可以有不同的形状用于批处理,但我不知道这是否对我有帮助

  • 在将每个输入向量馈送到RNN层之前,如何使其通过相同的转换?
    是否有一种方法可以对GRU进行排序,例如,在通过实际GRU单元之前添加一个f层


  • 我不是专家,但我希望这能有所帮助

    问题1:

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

    问题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
    转换,但您可以使用其他转换(嵌入等)