有没有一种方法可以合并具有不同样本/批次大小的喀拉拉邦中的图层,以及有关合并图层的问题

时间:2019-07-09 13:33:46

标签: keras keras-layer

我一直在寻找具体问题的答案,但没有发现任何问题,因此请在此处发布。任何帮助将不胜感激!

关于合并喀拉拉邦中的图层,我有两个问题。我建立了一个在输出之前将两个模型之间的层连接起来的模型。由于我的数据的性质,双方的输入(样本大小)将有所不同,但是合并层将是有益的,因为两个数据源都属于数据中的同一类,因此很高兴看到当两个模型在输出之前共享数据时,如何进行分类。

我想知道是否有一种方法可以从两侧使用不同的样本大小,因为如果数据大小不同,在拟合模型时会出现数组长度错误。

我解决这个问题的方法是通过简单地复制数据直到达到正确的尺寸,使模型的左分支(其输入样本大小小于右侧数据)与右侧的长度相同。 ,

左列:140个样本,右列180个样本...对于左列,我在数据底部添加1:40行以使其成为180个样本。

这是解决此问题的足够方法吗?

我的模型代码如下:

left_branch_input = Input(shape=(5078,), name='Left_input')
left_branch_output = Dense(64, activation='relu', name="middle_layer")(left_branch_input)
left_branch_output_2=Dense(32, activation="relu", name="second_layer")(left_branch_output)
left_branch_output_3=Dense(100, activation="relu", name="penultimate_layer")(left_branch_output_2)

right_branch_input = Input(shape=(5078,), name='right_input')
right_branch_output = Dense(64, activation='relu', name="middle_layerR")(right_branch_input)
right_branch_output_2=Dense(32, activation="relu", name="second_layerR")(right_branch_output)
right_branch_output_3=Dense(100, activation="relu", name="penultimate_layerR")(right_branch_output_2)

concat = concatenate([left_branch_output_3, right_branch_output_3], name='Concatenate')

final_model_output = Dense(24, activation='sigmoid')(concat)
final_model = Model(inputs=[left_branch_input, right_branch_input], outputs=final_model_output,
                    name='Final_output' )


final_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=["accuracy"])


sum_vector = np.array(y_train.astype(bool) + y_trainSC.astype(bool), dtype=int)

historyMerged=final_model.fit([X_train, X_trainSC], sum_vector,
          epochs=200,
          verbose=1,
          validation_split=0.15,
          callbacks=[EarlyStopping(monitor='val_loss', patience=5)], shuffle=True)

该模型可以编译并拟合,并且性能良好,但是作为一个健全性检查,我想问一下添加样本的方法(通过重复[需要长度]是否可以吗?是否可以忽略样本大小?来自不同的分支?

由于这是一个binary_crossentropy多标签问题,因此样本内部数据集的顺序不会完全重叠。例如,行是左分支的器官1年龄1,而右分支的第一个样本是器官2年龄2。这有关系吗?还是该模型根据单点编码数据按类工作,因为这实际上应该正确吗?它存在的类与顺序相反... model.predict函数实际上获取两个数据集的数据正确,因此,大概对于左右分支中相同的数据,合并层使用权重从两个分支中查找相似性和功能以改善分类:

最后,我对合并图层的模型摘要有疑问。

对此将提供任何帮助和建议!到目前为止,我对性能感到满意,但我想绝对确定订单和重复数据是解决此问题的有效方法。

谢谢!

1 个答案:

答案 0 :(得分:0)

似乎您的问题是如何连接具有不同形状的张量。这是一个可以在Colab中运行的简单示例:

import tensorflow as tf
keras = tf.keras

from keras.models import Model
from keras.layers import *

in_a = Input(shape=(10,))
in_b = Input(shape=(20,))
join = Concatenate(axis=1)([in_a, in_b])
h1 = Dense(10)(join)
out = Dense(1, activation='sigmoid')(h1)
model = Model([in_a, in_b], out)
model.compile('adam', 'mse')
model.summary()

关键是要连接的“轴”参数。

我不确定我是否理解你的第二个问题。左右分支中的特征根本不需要关联。这些可能完全不同。