Аргумент «Трансформирующий поезд» в Чейнере 5 - PullRequest
0 голосов
/ 06 мая 2019

Как я могу изменить этот аргумент поезда (код более старой версии) и использовать его в расширениях тренера.Какие необходимые изменения необходимо внести для использования этого кода в Chainer: 5.4.0.

ValueError: train argument is not supported anymore. Use 
chainer.using_config

[AutoEncoder / StackedAutoEncoder / Regression.py] (https://github.com/quolc/chainer-ML-examples/blob/master/mnist-stacked-autoencoder/net.py)

[Train.py] (https://github.com/quolc/chainer-ML-examples/blob/master/mnist-stacked-autoencoder/train_mnist_sae.py)

for epoch in range(0, n_epoch):
    print('  epoch {}'.format(epoch+1))
    perm = np.random.permutation(N)
    permed_data = np.array(input_data[perm])

    sum_loss = 0
    start = time.time()
    for i in range(0, N, batchsize):
        x = chainer.Variable(permed_data[i:i+batchsize])
        y = chainer.Variable(permed_data[i:i+batchsize])

        optimizer.update(model, x, y)
        sum_loss += float(model.loss.data) * len(y.data)
    end = time.time()
    throughput = N / (end - start)
    print('    train mean loss={}, throughput={} data/sec'.format(sum_loss 
/ N, throughput))
    sys.stdout.flush()

# prepare train data for next layer
x = chainer.Variable(np.array(train_data))
train_data_for_next_layer = cuda.to_cpu(ae.encode(x, train=False).data)

В ошибках указываются два разных раздела: 1. optimizer.update (model, x, y) 2подготовить данные поезда для второй строки следующего уровня, где они не соответствуют количеству узлов в каждом уровне. Код ошибки приведен ниже.

InvalidType: 
Invalid operation is performed in: LinearFunction (Forward)

Expect: prod(in_types[0].shape[1:]) == in_types[1].shape[1]
Actual: 784 != 250

1 Ответ

2 голосов
/ 06 мая 2019

Что касается подготовки аргумента, подробности записаны здесь: https://docs.chainer.org/en/stable/upgrade_v2.html

Аргумент train используется dropout в v1, но теперь Chainer использует config для управления своей фазой: в обучении или нет. Итак, есть две вещи, которые нужно сделать. Сначала удалите аргументы поезда из сценариев. Во-вторых, переместите код вывода в контекст.

with chainer.using_config(‘train’, False):
    # define the inference process

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

Не могли бы вы поделиться сообщениями об ошибках?

...