質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.92%

Chainerのエラー文の変数がわからない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,051

score 9

 前提・実現したいこと

Chainerを使って画像を二種類に分類したいのですが、エラーが出てしましい分類できません。
作業は以下のように行いました。

まず、自分でイメージスキャナから得た19872枚の画像にデータセット制作のコードを実行することでラベルを振りました。
次に、以下のChainerのコードを実行した時に、trainer.run()でエラーが発生しました。
エラー文で示されているin_types[0]はデータの値なのか、ネットワークの変数なのかどちらでしょうか。
修正する箇所を教えていただけるとありがたいです。

 発生している問題・エラーメッセージ

Exception in main training loop: 
Invalid operation is performed in: Convolution2DFunction (Forward)

Expect: in_types[0].dtype.kind == f
Actual: O != f
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/chainer/training/trainer.py", line 306, in run
    update()
  File "/usr/local/lib/python2.7/dist-packages/chainer/training/updaters/standard_updater.py", line 149, in update
    self.update_core()
  File "/usr/local/lib/python2.7/dist-packages/chainer/training/updaters/standard_updater.py", line 160, in update_core
    optimizer.update(loss_func, *in_arrays)
  File "/usr/local/lib/python2.7/dist-packages/chainer/optimizer.py", line 640, in update
    loss = lossfun(*args, **kwds)
  File "chainclass.py", line 25, in __call__
    return F.softmax_cross_entropy(self.fwd(x),t)
  File "chainclass.py", line 28, in fwd
    h1 = F.max_pooling_2d(F.relu(self.cn1(x)),2)
  File "/usr/local/lib/python2.7/dist-packages/chainer/links/connection/convolution_2d.py", line 175, in __call__
    groups=self.groups)
  File "/usr/local/lib/python2.7/dist-packages/chainer/functions/connection/convolution_2d.py", line 582, in convolution_2d
    y, = fnode.apply(args)
  File "/usr/local/lib/python2.7/dist-packages/chainer/function_node.py", line 243, in apply
    self._check_data_type_forward(in_data)
  File "/usr/local/lib/python2.7/dist-packages/chainer/function_node.py", line 328, in _check_data_type_forward
    self.check_type_forward(in_type)
  File "/usr/local/lib/python2.7/dist-packages/chainer/functions/connection/convolution_2d.py", line 58, in check_type_forward
    w_type.ndim == 4,
  File "/usr/local/lib/python2.7/dist-packages/chainer/utils/type_check.py", line 524, in expect
    expr.expect()
  File "/usr/local/lib/python2.7/dist-packages/chainer/utils/type_check.py", line 482, in expect
    '{0} {1} {2}'.format(left, self.inv, right))
Will finalize trainer extensions and updater before reraising the exception.
Traceback (most recent call last):
  File "chainclass.py", line 50, in <module>
    trainer.run()
  File "/usr/local/lib/python2.7/dist-packages/chainer/training/trainer.py", line 320, in run
    six.reraise(*sys.exc_info())
  File "/usr/local/lib/python2.7/dist-packages/chainer/training/trainer.py", line 306, in run
    update()
  File "/usr/local/lib/python2.7/dist-packages/chainer/training/updaters/standard_updater.py", line 149, in update
    self.update_core()
  File "/usr/local/lib/python2.7/dist-packages/chainer/training/updaters/standard_updater.py", line 160, in update_core
    optimizer.update(loss_func, *in_arrays)
  File "/usr/local/lib/python2.7/dist-packages/chainer/optimizer.py", line 640, in update
    loss = lossfun(*args, **kwds)
  File "chainclass.py", line 25, in __call__
    return F.softmax_cross_entropy(self.fwd(x),t)
  File "chainclass.py", line 28, in fwd
    h1 = F.max_pooling_2d(F.relu(self.cn1(x)),2)
  File "/usr/local/lib/python2.7/dist-packages/chainer/links/connection/convolution_2d.py", line 175, in __call__
    groups=self.groups)
  File "/usr/local/lib/python2.7/dist-packages/chainer/functions/connection/convolution_2d.py", line 582, in convolution_2d
    y, = fnode.apply(args)
  File "/usr/local/lib/python2.7/dist-packages/chainer/function_node.py", line 243, in apply
    self._check_data_type_forward(in_data)
  File "/usr/local/lib/python2.7/dist-packages/chainer/function_node.py", line 328, in _check_data_type_forward
    self.check_type_forward(in_type)
  File "/usr/local/lib/python2.7/dist-packages/chainer/functions/connection/convolution_2d.py", line 58, in check_type_forward
    w_type.ndim == 4,
  File "/usr/local/lib/python2.7/dist-packages/chainer/utils/type_check.py", line 524, in expect
    expr.expect()
  File "/usr/local/lib/python2.7/dist-packages/chainer/utils/type_check.py", line 482, in expect
    '{0} {1} {2}'.format(left, self.inv, right))
chainer.utils.type_check.InvalidType: 
Invalid operation is performed in: Convolution2DFunction (Forward)

Expect: in_types[0].dtype.kind == f
Actual: O != f

 該当のソースコード

import numpy as np
import math
import random
import chainer
from chainer import cuda,Function,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
from chainer.datasets import tuple_dataset

class MyChain(Chain):
        def __init__(self):
                super(MyChain,self).__init__(
                        cn1 = L.Convolution2D(3,30,9,stride=1,pad=0),
                        cn2 = L.Convolution2D(30,48,9,stride=1,pad=1),
                        cn3 = L.Convolution2D(48,60,9,stride=1,pad=0),
                        l1 = L.Linear(2160,100),
                        l2 = L.Linear(100,2),
                )

        def __call__(self,x,t):
                return F.softmax_cross_entropy(self.fwd(x),t)

        def fwd(self,x):
                h1 = F.max_pooling_2d(F.relu(self.cn1(x)),2)
                h2 = F.max_pooling_2d(F.relu(self.cn2(h1)),2)
                h3 = F.max_pooling_2d(F.relu(self.cn3(h2)),2)
                h4 = F.relu(self.l1(h3))
                return self.l2(h4)

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

validation_data = np.load('validation.npz')

data = Variable(np.array(validation_data['x'],dtype=np.float32))
label = Variable(np.array(validation_data['t'],dtype=np.float32))

tuple_data = tuple_dataset.TupleDataset(data,label)

iterator = iterators.SerialIterator(tuple_data,132)     
updater = training.StandardUpdater(iterator,optimizer)
trainer = training.Trainer(updater,(10,'epoch'))
trainer.extend(extensions.ProgressBar())

trainer.run() 

 試したこと

ここに問題に対して試したことを記載してください。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る