python - 3D CNN 模型只输出正值
问题描述
我正在使用 3D 编码器-解码器模型。我对模型的输入是添加了噪声的 3D 网格。网格中包含的值既有正值也有负值。我想对模型进行降噪。我不知道为什么,但我的模型只输出正值。我正在使用 L1 损失函数。我的训练和验证损失也随着时代的推移而减少。但是当我测试模型时,它只输出正值。但是,它应该只对输入进行降噪并输出正数和负数。我正在使用 PyTorch 自动混合精度进行训练。有人可以帮我解决这个问题。我已经在这上面花费了太多时间。但我无法修复它。如果需要培训脚本,我也可以提供。
pytorch 模型如下:
import torch
import torch.nn as nn
class Model_ED(nn.Module):
def __init__(self, bn=True):
super(Model_ED, self).__init__()
#### ENCODER ####
self.en_1 = nn.Sequential(
nn.Conv3d(1, 16, kernel_size=3, stride=1, padding=1),
#nn.Tanh(),
nn.ReLU(),
nn.Conv3d(16, 32, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
)
self.en_2 = nn.Sequential(
nn.Conv3d(32, 32, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
nn.Conv3d(32, 64, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
)
self.en_3 = nn.Sequential(
nn.Conv3d(64, 64, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
nn.Conv3d(64, 64, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
nn.Conv3d(64, 64, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
)
#### DECODER ####
self.de_3 = nn.Sequential(
nn.Conv3d(128, 32, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
nn.Conv3d(32, 32, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
)
self.de_2 = nn.Sequential(
nn.Conv3d(64, 16, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
nn.Conv3d(16, 16, kernel_size=3, stride=1, padding=1),
# nn.Tanh(),
nn.ReLU(),
)
self.de_1 = nn.Sequential(
nn.Conv3d(16, 1, kernel_size=3, stride=1, padding=1),
)
self.mp = nn.MaxPool3d(kernel_size=2, stride=2)
self.upsample = nn.Upsample(scale_factor=2)
def forward(self, input_tsdf_vol):
# feature encoding
en_1 = self.en_1(input_tsdf_vol)
en_2 = self.mp(self.en_2(en_1))
en_3 = self.mp(self.en_3(en_2))
# feature decoding
up_3 = self.upsample(en_3)
f_cat_3 = torch.cat([up_3, en_2], dim=1)
de_3 = self.de_3(f_cat_3)
up_2 = self.upsample(de_3)
f_cat_2 = torch.cat([up_2, en_1], dim=1)
de_2 = self.de_2(f_cat_2)
de_1 = self.de_1(de_2)
return de_1
解决方案
推荐阅读
- python - 使用 Python 异步来乱序计算事物
- excel - 用于查找多列并获取另一列信息的数组
- nginx - Kong v1.1.2如何设置超时
- ios - Cocoapods 中的可选框架,取决于 iOS 版本
- android - 显示来自多个频道 ID 的 Youtube 视频
- python - 使用python将Json文件导入mongodb的问题
- oracle - Oracle Schema 无法访问目录
- apache-spark - 如何调用从 Spark 作业调用的 Web 服务?
- r - 阅读器中的 read_tsv 未正确解析表
- here-api - 是否可以通过HERE transit-api 获取一个城市的所有车站?