亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

去噪線性自動編碼器學習輸出一個常數而不是去噪

去噪線性自動編碼器學習輸出一個常數而不是去噪

浮云間 2023-06-06 15:05:29
1d我正在嘗試為循環信號cos(x)等創建一個去噪自動編碼器。創建數據集的過程是我傳遞一個循環函數列表,并且對于生成的每個示例,它為列表中的每個函數滾動隨機系數,因此生成的每個函數都是不同的但循環的。例如 -0.856cos(x) - 1.3cos(0.1x)然后我添加噪聲并將信號標準化為介于[0, 1).接下來,我在其上訓練我的自動編碼器,但它學會輸出一個常量(通常是0.5)。我的猜測是它發生是因為0.5是歸一化函數的通常平均值。但這根本不是我渴望得到的結果。我提供了我為自動編碼器、數據生成器和訓練循環編寫的代碼,以及描述我遇到的問題的兩張圖片。第一個例子:第二個例子:線性自動編碼器:class LinAutoencoder(nn.Module):    def __init__(self, in_channels, K, B, z_dim, out_channels):        super(LinAutoencoder, self).__init__()        self.in_channels = in_channels        self.K = K # number of samples per 2pi interval        self.B = B # how many intervals        self.out_channels = out_channels        encoder_layers = []        decoder_layers = []        encoder_layers += [            nn.Linear(in_channels * K * B, 2*z_dim, bias=True),            nn.ReLU(),            nn.Linear(2*z_dim, z_dim, bias=True),            nn.ReLU(),            nn.Linear(z_dim, z_dim, bias=True),            nn.ReLU()        ]         decoder_layers += [            nn.Linear(z_dim, z_dim, bias=True),            nn.ReLU(),            nn.Linear(z_dim, 2*z_dim, bias=True),            nn.ReLU(),            nn.Linear(2*z_dim, out_channels * K * B, bias=True),            nn.Tanh()        ]        self.encoder = nn.Sequential(*encoder_layers)        self.decoder = nn.Sequential(*decoder_layers)    def forward(self, x):        batch_size = x.shape[0]        x_flat = torch.flatten(x, start_dim=1)        enc = self.encoder(x_flat)        dec = self.decoder(enc)        res = dec.view((batch_size, self.out_channels, self.K * self.B))        return res
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

問題是我沒有nn.BatchNorm1d在我的模型中使用,所以我猜在訓練過程中發生了一些錯誤(可能是梯度消失)。



查看完整回答
反對 回復 2023-06-06
  • 1 回答
  • 0 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號