Tensorflow 后续辍学层全部连接到第一个in keras?

Tensorflow 后续辍学层全部连接到第一个in keras?,tensorflow,neural-network,keras,lstm,dropout,Tensorflow,Neural Network,Keras,Lstm,Dropout,所以我刚刚安装了TensorBoard,查看了我一直在研究的一个深LSTM,在图上看到了一些我没有预料到的东西。我有5个隐藏的LSTM层,每个层后面都有一个辍学层,它显示第一个辍学层直接连接到以下4个辍学层中的每一个: LSTM深层神经网络图: 这到底是怎么回事?我希望这一切都是一条简单的直线,从上到下。这是我的结构在代码中的样子,我没有更改很多默认参数 # dataset.NUM_STEPS = 64 # dataset.NUM_FEATURES = 1109 # len(dataset.n

所以我刚刚安装了TensorBoard,查看了我一直在研究的一个深LSTM,在图上看到了一些我没有预料到的东西。我有5个隐藏的LSTM层,每个层后面都有一个辍学层,它显示第一个辍学层直接连接到以下4个辍学层中的每一个:

LSTM深层神经网络图:

这到底是怎么回事?我希望这一切都是一条简单的直线,从上到下。这是我的结构在代码中的样子,我没有更改很多默认参数

# dataset.NUM_STEPS = 64
# dataset.NUM_FEATURES = 1109
# len(dataset.note_to_one_hot) = 123
# len(dataset.duration_to_one_hot) = 846
# len(dataset.offset_to_one_hot) = 140

inputs = keras.layers.Input(shape=(dataset.NUM_STEPS, dataset.NUM_FEATURES))
x = keras.layers.LSTM(units=512, return_sequences=True)(inputs)
x = keras.layers.Dropout(.333)(x)
x = keras.layers.LSTM(units=512, return_sequences=True)(x)
x = keras.layers.Dropout(.333)(x)
x = keras.layers.LSTM(units=512, return_sequences=True)(x)
x = keras.layers.Dropout(.333)(x)
x = keras.layers.LSTM(units=512, return_sequences=True)(x)
x = keras.layers.Dropout(.333)(x)
x = keras.layers.LSTM(units=512)(x)
x = keras.layers.Dropout(.333)(x)

note_output = keras.layers.Dense(name="n", units=len(dataset.note_to_one_hot), activation='softmax')(x)
duration_output = keras.layers.Dense(name="d", units=len(dataset.duration_to_one_hot), activation='softmax')(x)
offset_output = keras.layers.Dense(name="o", units=len(dataset.offset_to_one_hot), activation='softmax')(x)

model = keras.models.Model(name=model_name, inputs=inputs, outputs=[note_output, duration_output, offset_output])
optimizer = keras.optimizers.RMSprop(lr=6.66e-5, rho=0.9, epsilon=None, decay=0.0)
losses = {"n": "categorical_crossentropy", "d": "categorical_crossentropy", "o": "categorical_crossentropy"}
metrics = {"n": "categorical_accuracy", "d": "categorical_accuracy", "o": "categorical_accuracy"}
model.compile(optimizer=optimizer, loss=losses, metrics=metrics)

一般来说,最好命名所有层以避免混淆。您是否可以尝试删除第一层以外的层的“输入形状”参数并检查您的模型?通常,当您的层是模型的第一层时,将使用“输入形状”参数。也许这就是在图形中创建这些连接?我刚刚尝试删除input_shape参数,图形看起来仍然完全一样!除了自动命名之外,我不知道如何命名这些层。lstm#和dropout#完美地描述了层的类型及其位置。输出层的名称只有一个字母,因为否则进度条文本将无法在控制台中的一行中显示。这会干扰keras打印“\r”字符,使其将每一步写入新行,并淹没控制台,使其无法在运行时查看损失/准确性progresses@mvers303这真的很有趣!我尝试了一个基于您的模型的玩具示例,并在tensorboard上可视化了它。在本例中,我没有添加任何退出层。它给出了一个简单的直线网络。我只删除了第一个辍学者,保留了其余的。此图形的结构与您的类似,从第二个辍学层到所有其他辍学层的辍学连接。@mevers303我还有一个奇怪的辍学图形连接。你有没有想过?