离散回归的CNN方法

2024-04-20 11:59:59 发布

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

我已经试着为我的项目制作一个CNN模型有一段时间了,但我真的没能让它工作。我的项目是设计一个(40,40)滤波器,使用一个类似图像的双通道输入(40,40,2),使用离散值(0.125,0.250375,0.5,0.625,0.750875,1.)。我对输入使用了scipyzscore,所以它们介于-2到2之间。我的标签是(40,40)值(0.125、0.25、0375、0.5、0.625、0.75、0875、1.)。 到现在为止,我一直在用回归法来寻找值,并将它们四舍五入到我想要的离散值,但这会成为一个问题,而且我会遇到精度问题。我使用的模型:

model = Sequential()
model.add(Conv2D(64,(5,5), input_shape = (40,40,2)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64,(5,5)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Conv2D(64,(3,3)))
model.add(Activation('relu'))

model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
model.add(Dropout(0.5))

model.add(Dense(1600))
model.add(Reshape((40,40)))
model.add(Activation('sigmoid'))

SGD = optimizers.SGD(lr=0.01, momentum=0, decay=0.0, nesterov=False)

model.compile(loss='MSE',
             optimizer='SGD',
             metrics=['MAE'])

### Saving the model
checkpoint_path = 'training/cp.ckpt'
checkpoint_dir = os.path.dirname(checkpoint_path)

### Checkpoint callback
cp_callback = ModelCheckpoint(checkpoint_path, 
                              monitor='val_loss',
                              save_best_only=True,
                              mode='auto',
                              save_weights_only=True,
                              verbose=1)

### Reduce LR on Plateau callback
lr_callback = ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=2, verbose=0, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)

### Training the model
history = model.fit(intensity_train, doe_train,
          batch_size=16,
          epochs=15,
          validation_data=(intensity_val,doe_val),
          callbacks = [cp_callback, lr_callback])

图表是: loss and validation loss

问题是,当我检查结果时(我用算法将四舍五入的结果与原始数据进行比较),有些数据有大约1590个正确值和10个错误值,这是惊人的。但对某些人来说,所有的预测值都是不正确的。所以我希望我的模型以(40,40)的形式给出输出,用我之前给出的离散值。既然标签是同一种形式,我想我可以得到更好的表现,但我不知道如何做到这一点。你知道吗

所以我的问题是,我怎样才能使回归输出是我想要的形式呢。你知道吗

附加问题:如何创建基于精度的度量,例如1560/1600正确值==>;%97.5。你知道吗


Tags: path模型addsizemodelcallbackvalactivation