エンコーダ構造は:入力 - >エンコーダ - >埋め込み - >デコーダ - >出力
それは低次元の埋め込みやエンコーディングを生成するために符号化された低次元ベクトルを得るために、入力データを圧縮し、この部分は、エンコーダと呼ばれます。第二の部分は、埋め込まれたニューラルネットワークの出力を転送するネットワークとは異なるタグにマッピングされるが、エンコーダの逆は、元の入力部は、デコーダと呼ばれる再構成されています。
エンコーダからの教師なし学習法であるPCAに類似ニューラルネットワークである、目標出力が入力されています。
###加载库和配置参数### インポートOS インポートPDB インポートトーチ インポートtorchvision からトーチインポートNN から torch.autogradのインポート変数 から torch.utils.data インポートデータローダ から torchvisionのインポート変換 から torchvision.datasets インポートMNISTを から torchvision。 utilsの輸入save_image から torchvision インポートデータセットの インポートPLT AS matplotlib.pyplot #構成パラメータ torch.manual_seed(1) #再現性のある結果を保証するためにランダムシードを設定 BATCH_SIZE = 128 learning_rate = 1E-2 num_epochs = 10 #のダウンロードデータベースと事前 train_dataset = datasets.MNIST( ルート = 'を./data '、#の位置データ保持 列車=真、#のトレーニングセット#範囲に[0、255]の範囲内であるPIL.Image [0,1.0] torch.FloadTensorの 変換= transforms.ToTensor ()、 ダウンロード = 真 ) test_dataset = datasets.MNIST( ルート = ' ./Data ' 、 列車 = Falseを、 トランスフォーム = transforms.ToTensor() ) # のデータバッチ、BATCH_SIZEのサイズの #トレーニングセットで、シャッフルをTrueに設定する必要があり、ランダムな順序を示し train_loader =データローダー(train_dataset 、BATCH_SIZE = BATCH_SIZE、シャッフル= 真) test_loader =データローダー(test_dataset、BATCH_SIZE = 10000、シャッフル= False)が #エンコーダ####モデルから### ############### ### クラスのオートエンコーダ(nn.Module): DEF __init__ (自己): スーパー(オートエンコーダ、セルフ)__init__ () self.encoder= nn.Sequential( nn.Linear( 28 * 28,1000 )、 nn.ReLU(真)、 nn.Linear( 1000,500 )、 nn.ReLU(真)、 nn.Linear( 500250 )、 nn.ReLU( )真 nn.Linear( 250,2 ) ) self.decoder = nn.Sequential( nn.Linear( 2,250 )、 nn.ReLU(真)、 nn.Linear( 250500 )、 nn.ReLU(真)、 NN。リニア( 500,1000 )、 nn.ReLU(真)、 nn.Linear( * 28 1000,28 )、 nn.Tanh() ) デフ前方(自己、X): X = self.encoder(x)は 、X = self.decoder(x)の リターンX モデル = オートエンコーダ()。CUDA() 基準 = nn.MSELoss() オプティマイザ = torch.optim.Adam( model.parameters()、LR = learning_rate、weight_decay = 1E-5 )# ##模型训练### のためのエポック中範囲(num_epochs) のためのデータで train_loader: IMG、_ = データ IMG = img.view(img.size(0)、 - 1 ) IMG = 可変(IMG).cuda() ###の順方向### の出力= モデル(IMG) 損失 = 基準(出力、IMG) ###の後方###の optimizer.zero_grad() loss.backward() optimizer.step() ####ログ##### プリント(「エポック[{} / {}]、損失: {:.4f} ' .format(エポック+ 1 、num_epochs、loss.item())) ###测试模型### #トレーニングとBatchNorm、ドロップアウトさまざまな構成をテストし、あなたがモデルをテストすることができるかどうかを示すために必要があるため )(model.eval eval_loss = 0 のためのデータで:test_loader #テストSETバッチ IMG、=ラベルデータ IMG = img.view(img.size(0を)、 - 1。 ) IMG = 変数(IMG).cuda() torch.no_gradと(): ラベル = 変数(ラベル) OUT = モデル(IMG).cuda()data.cpu()numpyの().. Y = (label.data).numpy() plt.scatter(OUT [:0]、OUT [: 1]、C = Y) plt.colorbar() plt.title('MNISTテストデータセットのautocoder " ) plt.show()