Python Keras-第一批标准层显示为tensorboard中其他每批标准层的输入,为什么会出现这种情况?

Python Keras-第一批标准层显示为tensorboard中其他每批标准层的输入,为什么会出现这种情况?,python,tensorflow,keras,tensorboard,batch-normalization,Python,Tensorflow,Keras,Tensorboard,Batch Normalization,很抱歉,如果这是我明显缺少的东西,我已经尝试了/r/learnmachinelearning,但是它们没有帮助,所以我想我应该试试这里 我用的是: def cnn_block_1(inp, filt, kernal, b_num): # Layer Names c1_left, b1_left, a1_left, c2_left, b2_left, a2_left, c3_left, b3_left, a3_left, p_left = \

很抱歉,如果这是我明显缺少的东西,我已经尝试了/r/learnmachinelearning,但是它们没有帮助,所以我想我应该试试这里

我用的是:

    def cnn_block_1(inp, filt, kernal, b_num):
        # Layer Names
        c1_left, b1_left, a1_left, c2_left, b2_left, a2_left, c3_left, b3_left, a3_left, p_left = \
        "c1_left_" + b_num, "b1_left_" + b_num, "a1_left_" + b_num, "c2_left_" + b_num, \
        "b2_left_" + b_num, "a2_left_" + b_num, "c3_left_" + b_num, "b3_left_" + b_num, \
        "a3_left_" + b_num, "p_left_" + b_num,

        # Block
        c1_l = Conv2D(filters=filt, kernel_size=kernal, padding="same", name=c1_left)(inp)
        bn1_l = BatchNormalization(name=b1_left)(c1_l)
        a1_l = Activation("relu", name=a1_left)(bn1_l)
        c2_l = Conv2D(filters=filt, kernel_size=kernal, padding="same", name=c2_left)(a1_l)
        bn2_l = BatchNormalization(name=b2_left)(c2_l)
        a2_l = Activation("relu", name=a2_left)(bn2_l)
        c3_l = Conv2D(filters=filt, kernel_size=kernal, padding="same", name=c3_left)(a2_l)
        bn3_l = BatchNormalization(name=b3_left)(c3_l)
        a3_l = Activation("relu", name=a3_left)(bn3_l)
        p_l = MaxPooling2D(padding="same", name=p_left)(a3_l)

        return p_l

    left_arm_blocks = 6
    filter_value = 2

    x1 = Sequential()
    x1.add(Embedding(vocab_char_size, embedding_char_size, input_length=maxlen, mask_zero=True,         weights=[e_char], name='embedding_1', trainable=False))
    x1.add(Lambda(lambda xo: K.expand_dims(xo, axis=3)))

    x2 = Sequential()
    x2.add(Embedding(vocab_word_size, embedding_word_size, input_length=maxlen, mask_zero=True,     weights=[e_word], name='embedding_2', trainable=False))
    x2.add(Lambda(lambda xo: K.expand_dims(xo, axis=3)))

    c = Concatenate(axis=3)([x1.output, x2.output])
    left_string = list()
    left_string.append(c)
    f_value = filter_value
    for i in range(left_arm_blocks):
        c = cnn_block_1(left_string[-1], f_value, kernal_value, str(i))
        left_string.append(c)
        f_value *= 2

    x = Lambda(lambda xq: xq, output_shape=lambda s: s)(left_string[-1])
    flat1 = Flatten()(x)
    #etc....
将一组预定义的CNN块串在一起。我将每次调用函数的输出保存在一个列表中,并使用列表中的最后一个输出作为下一层的输入等(我最初只是使用上一个输出作为输入,但制作了一个列表,以确保我在该容量下不会发疯)

不过,当我将模型加载到tensorboard上查看架构时,发生了一些奇怪的事情:

这是展开的节点:&更近一些:

这个没有功能,只有CNN层:

出于某种原因,它显示了第一批规范层或“b1_left_0”正被用作整个模型中每个其他批规范层的输入,包括模型的整个其他“右”臂,该臂稍后仅通过连接层与此连接

我假设我在这里遗漏了一些明显的东西,我很愚蠢,但我不知道如何进一步解决这个问题,因为我的代码中的所有内容似乎都在按预期工作


提前感谢您的建议。

图表是正确的-这就是Keras如何表示某些操作,如batch norm

它在图形中创建一个执行该操作的节点(它保留遇到的第一个节点,在您的示例中为
b1\u left\u 0
),并在执行相同操作的每个其他节点中引用。 tensorboard可视化不适用于使用keras创建的图形,因此在您的情况下,最好参考
model.summary()
方法,查看keras是否正确构建了图形