Получить размеры матрицы из слоев pytorch - PullRequest
0 голосов
/ 25 февраля 2020

Вот автоэнкодер, который я создал из уроков Pytorch:

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],[100,200,500] ]))

print(features)

batch = 10
data_loader = torch.utils.data.DataLoader(features, batch_size=2, shuffle=False)

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))

# print(decoder(torch.tensor(np.array([1,2,3])).type(FloatTensor)))

encoded_images = []
for j, images in enumerate(data_loader):
    images = images.view(images.size(0), -1) 
    images = Variable(images).type(FloatTensor)

    encoded_images.append(encoder(images))

Я вижу, что закодированные изображения имеют только что созданное измерение 10. Чтобы понять матричные операции, происходящие под колпаком, я m пытается напечатать размеры матрицы encoder и decoder, но shape недоступно для nn.Sequential

Как напечатать размеры матрицы nn.Sequential?

1 Ответ

2 голосов
/ 25 февраля 2020

A nn.Sequential - это не "слой", а "контейнер" . Он может хранить несколько слоев и управлять их выполнением (и некоторыми другими функциями).
В вашем случае каждый nn.Sequential содержит как линейный слой, так и нелинейную nn.Sigmoid активацию. Чтобы получить форму весов первого слоя в nn.Sequential, вы можете просто сделать:

encoder[0].weight.shape
...