神经网络拟合看起来很奇怪

2024-05-03 17:35:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图开发一个模型,预测化学配方成分的分数。您只需要选择成分,以及希望在最终混合物中获得哪些特性。对于Input1,我有一些关于组分的数据,例如粘度和密度。作为输入2,我有我需要的属性值。作为输出,它的(1,4)张量有4个分量分数,其和为1

作为训练数据,我有近20000个样本,这个数量并没有那么大,所以我认为它的模型应该过拟合。当我试着训练我的模型时,我决定一开始就过适应它。然而,它并没有过度拟合这些参数。该模型的最大精度约为50%,请帮助我提高模型精度

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
Cov_inp (InputLayer)            (None, 2, 4)         0                                            
__________________________________________________________________________________________________
conv1d_18 (Conv1D)              (None, 2, 128)       2176        Cov_inp[0][0]                    
__________________________________________________________________________________________________
max_pooling1d_18 (MaxPooling1D) (None, 1, 128)       0           conv1d_18[0][0]                  

__________________________________________________________________________________________________

flatten_18 (Flatten)            (None, 128)          0           max_pooling1d_18[0][0]           
__________________________________________________________________________________________________
Res_inp (InputLayer)            (None, 1)            0                                            
__________________________________________________________________________________________________
dense_158 (Dense)               (None, 64)           8256        flatten_18[0][0]                 
__________________________________________________________________________________________________
dense_161 (Dense)               (None, 64)           128         Res_inp[0][0]                    
__________________________________________________________________________________________________
dense_159 (Dense)               (None, 128)          8320        dense_158[0][0]                  
__________________________________________________________________________________________________
dense_162 (Dense)               (None, 128)          8320        dense_161[0][0]                  
__________________________________________________________________________________________________
dense_160 (Dense)               (None, 256)          33024       dense_159[0][0]                  
__________________________________________________________________________________________________
dense_163 (Dense)               (None, 256)          33024       dense_162[0][0]                  
__________________________________________________________________________________________________
dot_10 (Dot)                    (None, 1)            0           dense_160[0][0]                  
                                                                 dense_163[0][0]                  
__________________________________________________________________________________________________
dense_164 (Dense)               (None, 256)          512         dot_10[0][0]                     
__________________________________________________________________________________________________
dense_165 (Dense)               (None, 128)          32896       dense_164[0][0]                  
__________________________________________________________________________________________________
dense_166 (Dense)               (None, 64)           8256        dense_165[0][0]                  
__________________________________________________________________________________________________
dense_167 (Dense)               (None, 32)           2080        dense_166[0][0]                  
__________________________________________________________________________________________________
dense_168 (Dense)               (None, 4)            132         dense_167[0][0]                  
==================================================================================================
Total params: 137,124
Trainable params: 137,124
Non-trainable params: 0

建筑和损失,精度图如下

The model graphloss plotenter image description here

还有我的神经网络代码

X_features = Input(shape=(2,4),name='Cov_inp')
KV_data = Input(shape=(1,),name='Res_inp')

# Branch 1
layer1 = Conv1D(filters=128,kernel_size=4,activation='relu',padding='same',input_shape=(2,4))(X_features)
pooling1=MaxPooling1D(pool_size=2)(layer1)
flattern=Flatten()(pooling1)
dense_conv=Dense(64,activation='relu')(flattern)
dense_conv=Dense(128,activation='relu')(dense_conv)
dense_conv=Dense(256,activation='relu')(dense_conv)

# Branch 2
dense1=Dense(64,activation='relu')(KV_data)
dense2=Dense(128,activation='relu')(dense1)
dense4=Dense(256,activation='relu')(dense2)

#Concatination
addition=Dot(axes=1)([dense_conv, dense4])
final_dense = Dense(256,activation='relu')(addition)
final_dense = Dense(128,activation='relu')(final_dense)
final_dense = Dense(64,activation='relu')(final_dense)
final_dense = Dense(32,activation='relu')(final_dense)
out = Dense(4,activation='sigmoid')(final_dense)

from keras import backend as K

def root_mean_squared_error(y_true, y_pred):
        return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1)) 

model = Model(inputs=[X_features, KV_data], outputs=out)
model.compile(loss=root_mean_squared_error, optimizer=adam, metrics=['accuracy'])
model.summary()
history=model.fit({'Cov_inp':dataset_X,'Res_inp':dataset_KV}, dataset_Y,validation_split=0.2, epochs=2000, batch_size=128, verbose=2)