Модель построения слоя для кодирования-декодирования изображения - PullRequest
0 голосов
/ 26 апреля 2019

Я пишу модель авто-кодера для проблемы кодирования-декодирования изображения. Я хочу понять распределение узлов в каждом слое модели, подходящей для изображений.

Для приведенного ниже кода я использую 10 изображений формы (21 * 28 * 3).

class Autoencoder(Chain):
  def __init__(self, activation=F.relu):
    super().__init__()
    with self.init_scope():
  # encoder part
      self.l1 = L.Linear(1764,882)
      self.l2 = L.Linear(882,441)
  # decoder part
      self.l3 = L.Linear(441,882)
      self.l4 = L.Linear(882,1764)
      self.activation = activation

  def forward(self,x):
      h = self.encode(x)
      x_recon = self.decode(h)
      return x_recon

  def __call__(self,x):
      x_recon = self.forward(x)
      loss = F.mean_squared_error(h, x)
      return loss

  def encode(self, x):
      h = F.dropout(self.activation(self.l1(x)))
      return self.activation(self.l2(x))

  def decode(self, h, train=True):
      h = self.activation(self.l3(h))
      return self.l4(x)

gpu_id = 0
n_epoch = 5
batch_size = 2

model = Autoencoder()

optimizer = optimizers.SGD(lr=0.05).setup(model)
train_iter = iterators.SerialIterator(xs,batch_size)
valid_iter = iterators.SerialIterator(xs,batch_size)

updater = training.StandardUpdater(train_iter,optimizer)
trainer = training.Trainer(updater,(n_epoch,"epoch"),out="result")

from chainer.training import extensions
trainer.extend(extensions.Evaluator(valid_iter, model, device=gpu_id))

Во время работы trainer.run ():

InvalidType: 
Invalid operation is performed in: LinearFunction (Forward)
Expect: x.shape[1] == W.shape[1]
Actual: 1764 != 882

Я хочу понять, как распределение узлов работает по уровням в модели. Пожалуйста, предложите любой ресурс. Также, как назначить узлы в слоях в случае небольшого количества обучающих изображений.

...