

はじめまして。ディープラーニングを初めて勉強する者です。  
ディープラーニング自体触れたことのない分野で全くわからずの状態です。  
とあるECサイトを想定して、ユーザーの購入履歴のCSVからChainerで購入履歴を学習させ、入力用のユーザーのCSVが買うか買わないかの判定を0,
1で行いたいと思っています。

ウェブ上でCSVを読み込むサンプルなどを見つけ、自分なりに書いてみたものの、下記のようなエラーが出てしまい、困っている状態です。

実際のCSVは下記です。

[code]

    性別,"職業 (1=学生, 2=勤めてる, 3=主婦)",年齢,年収,利用可能なお金,購入日,購入時間帯,前に閲覧していた商品id,"季節(0=春, 1=夏, 2=秋, 3=冬)",地域 (JIS),購入時付与ポイント,屋外温度,"気候(0=晴れ, 1=くもり, 2=雨)",ドル円(外為),ユーロ円(外為),送料,"知った方法(1=ネット検索, 2=口コミ)","趣味(1=インドア, 2=アウトドア)","流入元(0=スマフォ, 1=PC, 2=実店舗)"
    1,3,23,400,3000000,1456758000,79200,2,0,1,0.03,16,1,103,103,0,1,1,0
    1,2,34,1000,5000000,1468508400,68400,3,1,13,0.01,16,0,112,114,100,1,2,0
    1,2,60,1000,5000000,1470150000,61200,2,1,13,0.05,18,0,103,112,100,2,1,1
    2,1,22,400,300000,1470236400,61200,3,1,13,0.05,24,0,100,109,100,2,2,2
    2,2,22,400,300000,1481641200,57600,2,3,13,0.05,3,2,101,100,0,1,1,1
    
[/code]

入力データは下記です

[code]

    1,3,23,400,3000000,1456758000,79200,2,0,1,0.03,16,1,103,103,0,1,1,0
    
[/code]

下記がコードです。

[code]

    # -*- coding: utf-8 -*-
    import numpy as np
    import chainer
    from chainer import cuda, 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 pandas as pd
    
    mnist = pd.read_csv('./data/bought_histories_utf8.csv')
    mnist_data, mnist_label = np.split(mnist, [1], axis=1)
    x_train,x_test = np.split(mnist_data, [50000])
    y_train,y_test = np.split(mnist_label, [50000])
    
    x_train = np.array(x_train , dtype=np.float32)
    y_train = np.array(y_train , dtype=np.int32)
    x_test = np.array(x_test , dtype=np.float32)
    y_test = np.array(y_test , dtype=np.int32)
    
    print('x_train:' + str(x_train.shape))
    print('y_train:' + str(y_train.shape))
    print('x_test:' + str(x_test.shape))
    print('y_test:' + str(y_test.shape))
    
    # 100回訓練させる
    train_iter = iterators.SerialIterator(x_train, batch_size=100)
    test_iter = iterators.SerialIterator(x_test, batch_size=100, repeat=False, shuffle=False)
    
    class MLP(chainer.Chain):
    
        def __init__(self, n_units, n_out):
            super(MLP, self).__init__(
                # the size of the inputs to each layer will be inferred
                l1=L.Linear(None, n_units),  # n_in -> n_units
                l2=L.Linear(None, n_units),  # n_units -> n_units
                l3=L.Linear(None, n_out),  # n_units -> n_out
            )
    
        def __call__(self, x):
            h1 = F.relu(self.l1(x))
            h2 = F.relu(self.l2(h1))
            return self.l3(h2)
    
    model = L.Classifier(MLP(1000, 1))
    
    # Setup an optimizer
    optimizer = chainer.optimizers.Adam()
    optimizer.setup(model)
    
    updater = training.StandardUpdater(train_iter, optimizer)
    trainer = training.Trainer(updater, (20, 'epoch'), out='result')
    trainer.extend(extensions.Evaluator(test_iter, model))
    trainer.run()
    
[/code]

エラーの内容

[code]

    x_train:(5, 1)
    y_train:(5, 18)
    x_test:(0, 1)
    y_test:(0, 18)
    Traceback (most recent call last):
      File "DynamicPricing.py", line 55, in <module>
        trainer.run()
      File "/usr/lib64/python2.7/site-packages/chainer/training/trainer.py", line 266, in run
        update()
      File "/usr/lib64/python2.7/site-packages/chainer/training/updater.py", line 170, in update
        self.update_core()
      File "/usr/lib64/python2.7/site-packages/chainer/training/updater.py", line 189, in update_core
        optimizer.update(loss_func, in_var)
      File "/usr/lib64/python2.7/site-packages/chainer/optimizer.py", line 392, in update
        loss = lossfun(*args, **kwds)
      File "/usr/lib64/python2.7/site-packages/chainer/links/model/classifier.py", line 61, in __call__
        assert len(args) >= 2
    AssertionError
    
[/code]

恐縮ですが、エラーの解決方法と0と1で出力する方法などのアドバイスいただければ幸いです。  
よろしくお願いいたします。


CC BY-SA 3.0
2016-11-12T03:53:56.793
30338
2017-07-30T01:12:38.640
2017-07-30T01:12:38.640
19110
19534
question
python chainer 深層学習
Chainerを用いてCSVから学習し、入力用のCSVが有効か無効かを0か1で判定したい


まず、クラス分類問題であれば、購入した人と購入しなかった人のデータが必要です。

[code]

    train_iter = iterators.SerialIterator(x_train, batch_size=100)
    
[/code]

に渡すx_trainは`chainer.datasets.tuple_dataset.TupleDataset`を使いましょう。  
`L.Classifier`は入力と出力のペアをiteratorから受け取る必要があります。


CC BY-SA 3.0
2016-11-28T03:15:26.650
30737
2016-11-28T03:15:26.650
525
30338
answer