エンコーダからMNISTフォトギャラリーを達成するために

  エンコーダ構造は:入力 - >エンコーダ - >埋め込み - >デコーダ - >出力

  それは低次元の埋め込みやエンコーディングを生成するために符号化された低次元ベクトルを得るために、入力データを圧縮し、この部分は、エンコーダと呼ばれます。第二の部分は、埋め込まれたニューラルネットワークの出力を転送するネットワークとは異なるタグにマッピングされるが、エンコーダの逆は、元の入力部は、デコーダと呼ばれる再構成されています。

  エンコーダからの教師なし学習法である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()

おすすめ

転載: www.cnblogs.com/candyRen/p/12110953.html