Chainerを利用して、15入力3出力のニューラルネットワークを作成しようと思い、以下のコードを書きました。

# -*- coding:utf-8 -*-

import numpy as np
import chainer
from chainer.datasets import tuple_dataset
from chainer import Variable
from chainer import Function, gradient_check, report, training, utils, 
Variable
from chainer import datasets, iterators, optimizers, serializers
from chainer import Link, Chain, ChainList
import chainer.functions as F
import chainer.links as L
from chainer.training import extensions

import csv

batchsize = 10
epoch = 20


class NChain(Chain):

    def __init__(self):

        super(NChain, self).__init__()
        self.n_out = 3  # 出力数
        self.n_units = 8  # 中間層ノード数

        with self.init_scope():
            self.l1 = L.Linear(None, self.n_units)
            self.l2 = L.Linear(None, self.n_units)
        self.l3 = L.Linear(None, self.n_out)

    def __call__(self, x):

        h1 = F.relu(self.l1(x))
        h2 = F.relu(self.l2(h1))
        y = self.l3(h2)
        return y


class datasets():
    def get_data():
        train_data = []  # trainデータを格納
        train_enr = []  # trainの格納時に利用(15個で一つのデータのため)
        label_data = []  # 教師データ
        dataset_number = 0  # データ総数を格納

        # ファイル読み込み(./answer.csv)
        csvfile = './answer.csv'
        f = open(csvfile, "r")
        reader = csv.reader(f)
        # ヘッダーを読み飛ばす
        header = next(reader)

        # 教師データの作成
        for row in reader:
            # 入力
            if(len(row) - 1 == 5):
                for i in range(5):
                    train_enr.append(float(row[i]))
                if(len(train_enr) == 15):
                    train_data.append(
                        Variable(np.array(train_enr, 
dtype='float32')))
                    train_enr = []
            # 出力
            elif(len(row) - 1 == 3):
                label_data.append(
                    Variable(np.array([float(row[0]), float(row[1]), 
float(row[2])], dtype='float32')))

                # データ数を1カウント
                dataset_number += 1

        # データセットの8割をtrain, 2割をtest用にする
        threshold = int((dataset_number * 8) / 10)

        # Trainerで使えるように整形
        train = tuple_dataset.TupleDataset(
            train_data[0:threshold], label_data[0:threshold])

        test = tuple_dataset.TupleDataset(
            train_data[threshold:], label_data[threshold:])

        return train, test


def main():

    model = NChain()

    optimizer = optimizers.Adam()
    optimizer.setup(model)

    # データセット読み込み
    train, test = datasets.get_data()

    train_iter = chainer.iterators.SerialIterator(train, batchsize)
    test_iter = chainer.iterators.SerialIterator(test, batchsize,
                                                 repeat=False, 
shuffle=False)

    # Set up a trainer
    updater = training.StandardUpdater(train_iter, optimizer, 
device=None)
    trainer = training.Trainer(updater, (epoch, 'epoch'), 
out='result')

    trainer.extend(extensions.Evaluator(test_iter, model))
    trainer.extend(extensions.LogReport())
    trainer.extend(extensions.PrintReport(
        ['epoch', 'main/accuracy', 'validation/main/accuracy']))
    trainer.extend(extensions.ProgressBar())

    # Run the training
    trainer.run()


if __name__ == '__main__':
    main()

しかし、今までデータセットを自前で作成したりTrainerを使ったことがなかったのですが、練習のために試してみたところ以下のようなエラーが出ました。

Traceback (most recent call last):
  File "chainer_pl.py", line 115, in <module>
    main()
  File "chainer_pl.py", line 111, in main
    trainer.run()
  File "/usr/local/lib/python3.5/dist-
packages/chainer/training/trainer.py", line 296, in run
    update()
      File "/usr/local/lib/python3.5/dist-
packages/chainer/training/updater.py", line 223, in update
    self.update_core()
  File "/usr/local/lib/python3.5/dist-
packages/chainer/training/updater.py", line 234, in update_core
    optimizer.update(loss_func, *in_arrays)
  File "/usr/local/lib/python3.5/dist-packages/chainer/optimizer.py", 
line 527, in update
    loss = lossfun(*args, **kwds)
TypeError: __call__() takes 2 positional arguments but 3 were given

どうやらTrainerのUpdateの際のエラーなようですが、解決方法が分かりません。
どなたかご教示いただけますでしょうか。