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

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

ただいまの
回答率

90.62%

  • Python 3.x

    5927questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    139questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。

Chainer ValueError: Out shape is mismatched

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 359

YukiSato

score 1

https://github.com/cocon-ai-group/turf-tipster
上記のtrain.pyを動かした際にOut shape is mismatchedのエラーが出ます
なんどもググって見ましたが発生原因が検討もつきません。

環境はUbuntu16.04 chainer3.5.0 です
エラー発生箇所はソースコードの"#ゲート分のデータを作る"の部分です。
勉強不足ですいませんが、エラーの正体を教えていただけると大変助かります
よろしくお願いいたします。

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

Exception in main training loop: Out shape is mismatched
Traceback (most recent call last):
File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/training/trainer.py", line 299, in run
update()
File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/training/updater.py", line 223, in update
self.update_core()
File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/training/updater.py", line 234, in update_core
optimizer.update(loss_func, *in_arrays)
File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/optimizer.py", line 541, in update
loss = lossfun(*args, kwds) File "train.py", line 305, in call r = super(An_Classifier, self).call(*args, kwargs)
File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/links/model/classifier.py", line 114, in call
self.y = self.predictor(*args, kwargs) File "/home/gutsmans/works/turf-tipster/rnn_network.py", line 67, in call l_h1[i] = l File "cupy/core/core.pyx", line 1553, in cupy.core.core.ndarray.setitem File "cupy/core/core.pyx", line 3207, in cupy.core.core._scatter_op File "cupy/core/elementwise.pxi", line 807, in cupy.core.core.ufunc.call File "cupy/core/elementwise.pxi", line 391, in cupy.core.core._get_out_args Will finalize trainer extensions and updater before reraising the exception. Traceback (most recent call last): File "train.py", line 399, in <module> main() File "train.py", line 391, in main trainer.run() File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/training/trainer.py", line 313, in run six.reraise(*sys.exc_info()) File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/six.py", line 693, in reraise raise value File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/training/trainer.py", line 299, in run update() File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/training/updater.py", line 223, in update self.update_core() File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/training/updater.py", line 234, in update_core optimizer.update(loss_func, *in_arrays) File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/optimizer.py", line 541, in update loss = lossfun(*args, kwds)
File "train.py", line 305, in call
r = super(An_Classifier, self).call(*args, kwargs) File "/home/gutsmans/.pyenv/versions/3.6.5/lib/python3.6/site-packages/chainer/links/model/classifier.py", line 114, in call self.y = self.predictor(*args, kwargs)
File "/home/gutsmans/works/turf-tipster/rnn_network.py", line 67, in call
l_h1[i] = l
File "cupy/core/core.pyx", line 1553, in cupy.core.core.ndarray.setitem
File "cupy/core/core.pyx", line 3207, in cupy.core.core._scatter_op
File "cupy/core/elementwise.pxi", line 807, in cupy.core.core.ufunc.call
File "cupy/core/elementwise.pxi", line 391, in cupy.core.core._get_out_args
ValueError: Out shape is mismatched

 該当のソースコード

# -*- coding: utf-8 -*-
import chainer
import chainer.functions as F
import chainer.links as L
from chainer import training, datasets, iterators, optimizers
from chainer.training import extensions
from chainer.functions.evaluation import accuracy
from chainer.links import caffe as C
from chainer import reporter
import numpy as np

nn_nodes = (1500, 350, 45, 300, 150)

# ニューラルネットワークの定義をするクラス
class Turf_Tipster_NN(chainer.Chain):

    def __init__(self, n_horses, n_jockeys):
        n_units_h, n_units_v, n_units_j, n_units_r, n_units_d = nn_nodes
        super(Turf_Tipster_NN, self).__init__()
        with self.init_scope():
            # 馬モデルのステータス(モデルを保存できるようにParameterで保持しておく)
            self.vc = chainer.Parameter(np.zeros((n_horses, n_units_v), dtype=np.float32))
            self.vh = chainer.Parameter(np.zeros((n_horses, n_units_v), dtype=np.float32))
            # 馬モデルのレイヤー
            self.le = L.EmbedID(n_horses, n_horses)
            self.l1 = L.Linear(n_horses, n_units_h)
            self.l2 = L.LSTM(n_units_h, n_units_v)
            # 騎手モデルのレイヤー
            self.re = L.EmbedID(n_jockeys, n_jockeys)
            self.r1 = L.Linear(n_jockeys, n_units_j)
            # レースモデルのレイヤー
            self.m1 = L.EmbedID(11, 11)
            self.m2 = L.EmbedID(8, 8)
            self.m3 = L.EmbedID(4, 4)
            self.m4 = L.EmbedID(4, 4)
            self.j1 = L.Linear(n_units_v + n_units_j + 11 + 8 + 4 + 4, n_units_r)
            self.j2 = L.Linear(n_units_r, n_units_r)
            self.j3 = L.Linear(n_units_r, n_units_d)

    # 引数は(レースメタ情報, グリッド情報)で着順になっている
    def __call__(self, t, train=True):
        grid = t[0]
        num_gates = len(grid)
        cp = self.xp
        # 馬モデルのステータス
        l_vc = cp.zeros((num_gates, self.vc.data.shape[1]), dtype=cp.float32)
        l_vh = cp.zeros((num_gates, self.vh.data.shape[1]), dtype=cp.float32)
        # ゲート分のステータスを作る
        for i in range(num_gates):
            l, r, m1, m2, m3, m4 = grid[i] # l, rは(馬番号, 騎手番号)
            _l = l
            if cp != np:
                l = chainer.cuda.to_cpu(l)
            l = int(l[0])
            l_vc[i][:] = self.vc.data[l]
            l_vh[i][:] = self.vh.data[l]
        l_h1 = cp.zeros((num_gates), dtype=cp.int32)
        r_h1 = cp.zeros((num_gates), dtype=cp.int32)
        t_m1 = cp.zeros((num_gates), dtype=cp.int32)
        t_m2 = cp.zeros((num_gates), dtype=cp.int32)
        t_m3 = cp.zeros((num_gates), dtype=cp.int32)
        t_m4 = cp.zeros((num_gates), dtype=cp.int32)
        # ゲート分のデータを作る
        for i in range(num_gates):
            l, r, m1, m2, m3, m4 = grid[i]
            l_h1[i] = l
            r_h1[i] = r
            t_m1[i] = m1
            t_m2[i] = m2
            t_m3[i] = m3
            t_m4[i] = m4
        # 馬モデルを計算
        self.l2.set_state(chainer.Variable(l_vc), chainer.Variable(l_vh))
        l_l1 = F.tanh(self.le(l_h1))
        l_l2 = F.tanh(self.l1(l_l1))
        l_l3 = F.tanh(self.l2(l_l2))
        # 馬モデルのステータスを保存
        if train == True:
            l_wc = cp.copy(self.vc.data)
            l_wh = cp.copy(self.vh.data)
            for i in range(num_gates):
                l, r, m1, m2, m3, m4 = grid[i] # l, rは(馬番号, 騎手番号)
                if cp != np:
                    l = chainer.cuda.to_cpu(l)
                l = int(l[0])
                l_wc[l][:] = self.l2.c.data[i]
                l_wh[l][:] = self.l2.h.data[i]
            self.vc.copydata(chainer.Variable(l_wc))
            self.vh.copydata(chainer.Variable(l_wh))
        # レースモデルを計算
        r_h1 = F.tanh(self.re(r_h1))
        r_h2 = F.tanh(self.r1(r_h1))
        j_m1 = self.m1(t_m1)
        j_m2 = self.m2(t_m2)
        j_m3 = self.m3(t_m3)
        j_m4 = self.m4(t_m4)
        j_h1 = F.concat([l_l3, r_h2, j_m1, j_m2, j_m3, j_m4], axis=1)
        j_h2 = F.dropout(F.sigmoid(self.j1(j_h1)))
        j_h3 = F.sigmoid(self.j2(j_h2))
        return F.sigmoid(j_h3)

    def reset_state(self):
        self.l2.reset_state()
        self.vc.copydata(chainer.Variable(cp.zeros(self.vc.data.shape, dtype=cp.float32)))
        self.vh.copydata(chainer.Variable(cp.zeros(self.vh.data.shape, dtype=cp.float32)))

 試したこと

ipythonでembed()を入れ試して見ましたがどうもなりませんでした

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

Ubuntu16.04 chainer4.1で同様のエラーが出ましたが、chainerを3.1までダウングレードしたところ解消しました。

pip install chainer==3.1.0

cupyもダウングレードされ、2.1.0.1が入りました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/01 17:08

    ありがとうございます。
    おっしゃる通り、chainerとcupyのバージョンの問題でした。
    chainerのバージョンを3.5.0に下げcupyもpip install cupy==2.4.0 --no-cache-dir で入れ直したところエラー解消しました!

    キャンセル

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

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

関連した質問

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

  • Python 3.x

    5927questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Chainer

    139questions

    Chainerは、国産の深層学習フレームワークです。あらゆるニューラルネットワークをPythonで柔軟に書くことができ、学習させることが可能。GPUをサポートしており、複数のGPUを用いた学習も直感的に記述できます。