代码之家  ›  专栏  ›  技术社区  ›  blue-sky

矢量编码的自动编码器

  •  1
  • blue-sky  · 技术社区  · 7 年前

    这是我写的一个自动编码器,用于编码两个向量:

    [1,2,3] & [1,2,3]

    矢量在以下位置创建: features = torch.tensor(np.array([ [1,2,3],[1,2,3] ]))

    这项工作符合以下准则:

    %reset -f
    
    epochs = 1000
    from pylab import plt
    plt.style.use('seaborn')
    import torch.utils.data as data_utils
    import torch
    import torchvision
    import torch.nn as nn
    from torch.autograd import Variable
    
    cuda = torch.cuda.is_available()
    FloatTensor = torch.cuda.FloatTensor if cuda else torch.FloatTensor
    import numpy as np
    import pandas as pd
    import datetime as dt
    
    
    features = torch.tensor(np.array([ [1,2,3],[1,2,3] ]))
    
    print(features)
    
    batch = 2
    data_loader = torch.utils.data.DataLoader(features, batch_size=2, shuffle=True)
    
    encoder = nn.Sequential(nn.Linear(3,batch), nn.Sigmoid())
    decoder = nn.Sequential(nn.Linear(batch,3), nn.Sigmoid())
    autoencoder = nn.Sequential(encoder, decoder)
    
    optimizer = torch.optim.Adam(params=autoencoder.parameters(), lr=0.001)
    
    encoded_images = []
    for i in range(epochs):
        for j, (images, _) in enumerate(data_loader):
        #     images = images.view(images.size(0), -1) 
            images = Variable(images).type(FloatTensor)
            optimizer.zero_grad()
            reconstructions = autoencoder(images)
            loss = torch.dist(images, reconstructions)
            loss.backward()
            optimizer.step()
    
            encoded_images.append(encoder(images))
    

    features = torch.tensor(np.array([ [1,2,3],[1,2,3],[1,2,3] ]))
    

    我收到错误消息:

    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-223-3ca45519e975> in <module>
         32 encoded_images = []
         33 for i in range(epochs):
    ---> 34     for j, (images, _) in enumerate(data_loader):
         35     #     images = images.view(images.size(0), -1)
         36         images = Variable(images).type(FloatTensor)
    
    ValueError: not enough values to unpack (expected 2, got 1)
    

    我是否正确设置了数据加载器?

    2 回复  |  直到 7 年前
        1
  •  1
  •   MBT Nina Golyandina    7 年前

    我不知道是什么 _ 正是指。

    这是批量大小的数据加载器 2 2. 数据集中的培训示例:

    features = torch.tensor(np.array([ [1,2,3],[1,2,3] ]))
    
    #print(features)
    
    data_loader = torch.utils.data.DataLoader(features, batch_size=2, shuffle=True)
    for j, (images) in enumerate(data_loader):
        print(j, images)
    

    0 tensor([[ 1,  2,  3],
            [ 1,  2,  3]])
    

    所以在你的情况下,你把它分别拆了。把张量分成两部分 (images, _) :

    t = torch.tensor([ [1,2,3],[1,2,3] ])
    (images, _) = t
    print('images:',images, '_:',_)
    # prints: 
    # images: tensor([ 1,  2,  3]) _: tensor([ 1,  2,  3])
    

    3 数据集中的培训示例最后一批仅包含

    features = torch.tensor(np.array([ [1,2,3],[1,2,3],[1,2,3]]))
    
    #print(features)
    
    data_loader = torch.utils.data.DataLoader(features, batch_size=2, shuffle=True)
    for j, (images) in enumerate(data_loader):
        print(j, images)
    

    输出:

    0 tensor([[ 1,  2,  3],
            [ 1,  2,  3]])
    1 tensor([[ 1,  2,  3]])
    

    此时会出现解包错误,因为无法拆分最后一批。但正如Shai所建议的,您没有使用任何标签,因此可能需要使用完全不同的设置。

    但我希望这个例子有点帮助!

        2
  •  0
  •   Shai    7 年前

    您的数据集(数据加载器内部)仅返回 image 每件 没有 标签。当您迭代并期望每个项目 (image, _) 形象 _ 这是不可能的。这就是为什么会出现“没有足够的值来解包”错误

    推荐文章