前提・実現したいこと
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で質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる