Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python KERA连接层的性能比单个CNN差_Python_Keras_Conv Neural Network - Fatal编程技术网

Python KERA连接层的性能比单个CNN差

Python KERA连接层的性能比单个CNN差,python,keras,conv-neural-network,Python,Keras,Conv Neural Network,我对keras/CNNs比较陌生。我构建了一个模型,将3个连续CNN的输出与其他元数据连接到最终的密集网络中。来自3个单独层的输出是合理的,执行正常,但是与元数据连接时的最终输出显示出更差的性能,并且似乎没有学习-尽管这些元数据中的一些对于预测应该非常有用。标签是一个热编码分类数据(4个不同的标签)。我有点困惑,为什么最终的连接模型与单个片段相比表现得如此糟糕,如果您能了解我在这里可能做错了什么,我将不胜感激。谢谢 # create first conv layers first_input =

我对keras/CNNs比较陌生。我构建了一个模型,将3个连续CNN的输出与其他元数据连接到最终的密集网络中。来自3个单独层的输出是合理的,执行正常,但是与元数据连接时的最终输出显示出更差的性能,并且似乎没有学习-尽管这些元数据中的一些对于预测应该非常有用。标签是一个热编码分类数据(4个不同的标签)。我有点困惑,为什么最终的连接模型与单个片段相比表现得如此糟糕,如果您能了解我在这里可能做错了什么,我将不胜感激。谢谢

# create first conv layers
first_input = Input(shape=input_shape, dtype='int32', name='first_input')
x = Embedding(input_dim=num_features,output_dim=embedding_dim,input_length=input_shape[0])(first_input)
#x = Dropout(rate = dropout_rate)(x)
x = Conv1D(filters=filters,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = Conv1D(filters=filters,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = MaxPooling1D(pool_size=pool_size)(x)

x = Conv1D(filters=filters * 2,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = Conv1D(filters=filters * 2,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = GlobalAveragePooling1D()(x)

aux_predictions = Dense(op_units, activation=op_activation)(x)

# now create a convolutional model for second
second_input = Input(shape=input_shape, dtype='int32', name='second_input')
x = Embedding(input_dim=num_features,output_dim=embedding_dim,input_length=input_shape[0])(second_input)
#x = Dropout(rate = dropout_rate)(x)
x = Conv1D(filters=filters,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = Conv1D(filters=filters,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = MaxPooling1D(pool_size=pool_size)(x)

x = Conv1D(filters=filters * 2,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = Conv1D(filters=filters * 2,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = GlobalAveragePooling1D()(x)

aux_predictions2 = Dense(op_units, activation=op_activation)(x)

# now create a convolutional model for second
third_input = Input(shape=input_shape, dtype='int32', name='third_input')
x = Embedding(input_dim=num_features,output_dim=embedding_dim,input_length=input_shape[0])(third_input)
#x = Dropout(rate = dropout_rate)(x)
x = Conv1D(filters=filters,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = Conv1D(filters=filters,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = MaxPooling1D(pool_size=pool_size)(x)

x = Conv1D(filters=filters * 2,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = Conv1D(filters=filters * 2,
                                  kernel_size=kernel_size,
                                   strides = 1,
                                  activation='relu',
                                  bias_initializer='random_uniform',
                                  padding='same')(x)
x = GlobalAveragePooling1D()(x)

aux_predictions3 = Dense(op_units, activation=op_activation)(x)

# Now combine three CNN layers with metadata
auxiliary_input = Input(shape=metadata_dim, name='aux_input')
x = keras.layers.concatenate([aux_predictions, aux_predictions2, aux_predictions3, auxiliary_input ])
#x = Dropout(rate = dropout_rate)(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)

model_output = Dense(op_units, activation=op_activation, name='model_output')(x)



opt = SGD(lr=0.01)

fullmetamodel = Model(inputs=[first_input, second_input, third_input, auxiliary_input], outputs=[aux_predictions, aux_predictions2, aux_predictions3, model_output])
fullmetamodel.compile(
              metrics=['categorical_accuracy'], loss='categorical_crossentropy',
              loss_weights=[0.2, 0.2, 0.2, 1.], optimizer = opt)
callbacks = [keras.callbacks.EarlyStopping(monitor='val_loss', patience=2), TQDMNotebookCallback(leave_inner=False, leave_outer = True)] 
fullmetamodel.fit(x=[first_x_train, second_x_train, third_x_train, training_meta], y=[training_labels,training_labels,training_labels, training_labels],
                  batch_size=32, epochs=40, validation_data=([first_x_val, second_x_val, third_x_val, val_meta], [val_labels, val_labels, val_labels, val_labels])
                  , verbose = 0, callbacks = callbacks)  # starts training


# Output, three conv layers working ok, concatenated model performing poorly
Training
50% 20/40 [2:49:34<2:49:23, 508.20s/it]
Epoch 20
[loss: 8.002, dense_118_loss: 0.749, dense_119_loss: 0.769, dense_120_loss: 0.876, model_output_loss: 7.523, dense_118_categorical_accuracy: 0.686
  , dense_119_categorical_accuracy: 0.626, dense_120_categorical_accuracy: 0.620, model_output_categorical_accuracy: 0.532] : 66% 265184/400000 [05:13<02:40, 840.90it/s]


#创建第一个conv层
first\u input=input(shape=input\u shape,dtype='int32',name='first\u input')
x=嵌入(输入尺寸=数量特征,输出尺寸=嵌入尺寸,输入长度=输入形状[0])(第一个输入)
#x=辍学率=辍学率(x)
x=Conv1D(过滤器=过滤器,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=Conv1D(过滤器=过滤器,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=最大池1d(池大小=池大小)(x)
x=Conv1D(过滤器=过滤器*2,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=Conv1D(过滤器=过滤器*2,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=GlobalAveragePoolg1d()(x)
辅助预测=密集(操作单元,激活=操作激活)(x)
#现在创建一个卷积模型,用于第二个
第二个输入=输入(shape=input\u shape,dtype='int32',name='second\u input')
x=嵌入(输入尺寸=数量特征,输出尺寸=嵌入尺寸,输入长度=输入形状[0])(第二个输入)
#x=辍学率=辍学率(x)
x=Conv1D(过滤器=过滤器,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=Conv1D(过滤器=过滤器,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=最大池1d(池大小=池大小)(x)
x=Conv1D(过滤器=过滤器*2,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=Conv1D(过滤器=过滤器*2,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=GlobalAveragePoolg1d()(x)
辅助预测2=密集(操作单元,激活=操作激活)(x)
#现在创建一个卷积模型,用于第二个
第三个输入=输入(shape=input\u shape,dtype='int32',name='third\u input')
x=嵌入(输入尺寸=数量特征,输出尺寸=嵌入尺寸,输入长度=输入形状[0])(第三个输入)
#x=辍学率=辍学率(x)
x=Conv1D(过滤器=过滤器,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=Conv1D(过滤器=过滤器,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=最大池1d(池大小=池大小)(x)
x=Conv1D(过滤器=过滤器*2,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=Conv1D(过滤器=过滤器*2,
内核大小=内核大小,
步幅=1,
激活='relu',
偏差\u初始值设定项=“随机\u均匀”,
padding='same')(x)
x=GlobalAveragePoolg1d()(x)
辅助预测3=密集(操作单元,激活=操作激活)(x)
#现在将三个CNN层与元数据结合起来
辅助输入=输入(shape=metadata\u dim,name='aux\u input')
x=keras.layers.concatenate([aux_预测,aux_预测2,aux_预测3,辅助_输入])
#x=辍学率=辍学率(x)
x=密集(64,激活='relu')(x)
x=密集(64,激活='relu')(x)
x=密度