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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Chainer

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

Python 3.x

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

Q&A

1回答

3540閲覧

Chainerでのアップサンプリングの仕方について

mmss

総合スコア46

Chainer

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

Python 3.x

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

0グッド

0クリップ

投稿2017/11/15 11:56

編集2017/11/15 11:56

ご質問失礼いたします。

Chainerで人工知能を試してみたく、いろいろ勉強しているのですがアップサンプリングの際にエラーが出てしまい困っております。ご助力いただけますと幸いでございます。環境はChainer、Python3、Windows10です。

numpy配列y(2,32,25,25)をアップサンプリングしたいと考え以下のようにCODEを通しました。

python

1p = F.MaxPooling2D(ksize = 1) 2pooled_y = p(y) 3y = F.upsampling_2d(pooled_y, p.indexes, ksize = 2)

なぜか別のパソコンでは通るのですが、このパソコンでは以下のようにエラーが出てしまいます。

python

1TypeError: 'MaxPooling2D' object is not callable #pooled_y = p(y)のところで発生

下記のURLを参考に、以下のように書き直したところ

python

1p = F.max_pooling_2d(ksize = 1) #変更点 2pooled_y = p(y) 3y = F.upsampling_2d(pooled_y, p.indexes, ksize = 2)

リンク内容

このようにエラーが出てしまいました。

python

1TypeError: max_pooling_2d() missing 1 required positional argument: 'x' 2#p = F.max_pooling_2d(ksize = 1)のところで発生

max_pooling_2dの引数に配列yも与えてみたところ(p = F.max_pooling_2d(y,ksize = 1))

python

1TypeError: 'Variable' object is not callable #pooled_y = p(y)のところで発生

このようにエラーが出てしまいました。

参考資料を探してみたのですがKerasを利用されている方が多く、なかなか進めませんでしたので質問させていただきました。ご助力のほどよろしくお願いいたします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

diningyo

2017/11/15 15:31

chainerのバージョンも教えていただけないでしょうか?
mmss

2017/11/15 15:46

2.1.0でした!!
guest

回答1

0

上記、補足ありがとうございました。
恐らくですが、エラーの出ているPCと出ないPCでchainerのバージョンが異なっているのではないでしょうか?
#インストールした時期が異なっていてバージョン違いになってる、とか。

ここから以下はchianerのバージョンが異なっていることを前提に記載します。

記載いただきました、chainer-2.1.0では下記のコードは動作すると思います。

python

1p = F.MaxPooling2D(ksize = 1) 2pooled_y = p(y) 3y = F.upsampling_2d(pooled_y, p.indexes, ksize = 2)

一方で当方の手元のPCにインストールされているchainer-3.0.0では上記コードは動作しません。
理由ですが、MaxPooling2Dの仕様(というか継承しているクラス)が変わっていることが原因です。

chainer-2.1.0ではfunction.Funtionを継承しており、Functionクラス内で__call__が実装されているので、上記コードのp(y)で処理が可能です。

一方でchainer-3.0.0ではfunction.Functionはold styleと位置づけられており、chainerが提供するfunctions下のクラスはfunction_node.FunctionNodeクラスを継承するようになっています。このクラスでは__calll__メソッドが実装されておらず、処理を行う場合は明示的にapplyメソッドをコールする必要があるようです。
#そこまで真面目に変更履歴を追ってないので変更された理由は把握できてません。

例えば上記、MaxPooling2Dを行う関数max_pooling_2dはchainer-3.0.0では以下のようになっています。

python

1 return MaxPooling2D(ksize, stride, pad, cover_all).apply((x,))[0]

これをご提示頂きましたコードに反映するなら、2行目が以下のようになるでしょうか。

python

1pooled_y = p.apply((y, ))[0]

投稿2017/11/16 02:22

diningyo

総合スコア379

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問