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

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

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

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3763閲覧

RNNのサンプルコードについて

kkkmokotan

総合スコア45

Chainer

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/04/11 07:47

python3.5で動作しています。
こちらの和訳ページ
を元にサンプルのコードを記述したのですが、エラーにより動作しませんでした。エラー文としてはどうやらどこかの入力にnp.nddarrayを要求されているみたいです。

error

1TypeError: numpy.ndarray or cuda.ndarray are expected. 2Actual: <class 'ellipsis'>

私の解釈が追いついていないのですがこちらの和訳ページのレイですと、次元数100のベクトルを1000こ入力にとって、時系列データとし、LSTMの入力にしているとみて良いのでしょうか?

python

1import numpy as np 2import chainer 3from chainer import cuda, Function, gradient_check, report, training, utils, Variable 4from chainer import datasets, iterators, optimizers, serializers 5from chainer import Link, Chain, ChainList 6import chainer.functions as F 7import chainer.links as L 8from chainer.training import extensions 9 10class RNN(Chain): 11 def __init__(self): 12 super(RNN, self).__init__( 13 embed=L.EmbedID(1000, 100), # word embedding 14 mid=L.LSTM(100, 50), # the first LSTM layer 15 out=L.Linear(50, 1000), # the feed-forward output layer 16 ) 17 18 def reset_state(self): 19 self.mid.reset_state() 20 21 def __call__(self, cur_word): 22 # Given the current word ID, predict the next word. 23 x = self.embed(cur_word) 24 h = self.mid(x) 25 y = self.out(h) 26 return y 27 28def compute_loss(x_list): 29 loss = 0 30 for cur_word, next_word in zip(x_list, x_list[1:]): 31 loss += model(cur_word, next_word) 32 return loss 33 34 35 36 37rnn = RNN() 38model = L.Classifier(rnn) 39optimizer = optimizers.SGD() 40optimizer.setup(model) 41 42 43x_list = [Variable(..., volatile='on') for _ in range(100)] # list of 100 words 44rnn.reset_state() 45optimizer.update(compute_loss, x_list)

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

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

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

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

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

can110

2017/04/11 08:49

エラーの発生個所が分かる完全なTracebackを追記すると、回答得られやすいかと思います。
guest

回答1

0

ベストアンサー

直接のエラー原因はVariable構築時の引数にnumpy.ndarray or cuda.ndarrayが与えられていないためだと思います。
エラー原因に関する参考ページ:Chainer:簡単な微分をしてみよう

そこで、原文Recurrent Nets and their Computational Graphを見て思ったのですが
x_list = [ Variable( ... , volatile='on') for _ in range(100) ]...部分は
np.random.randint( 255, size=(1,)).astype(np.int32)を指しているような気がします。
和訳ではなぜかこの部分の記述がないようですが。

すなわち

Python

1#x_list = [Variable(..., volatile='on') for _ in range(100)] # list of 100 words 2x_list = [Variable( np.random.randint( 255, size=(1,)).astype(np.int32), volatile='on') for _ in range(100)] # list of 100 words

と修正すればエラーは解消すると思われます(未検証)。

投稿2017/04/11 08:55

編集2017/04/11 08:57
can110

総合スコア38233

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

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

kkkmokotan

2017/04/11 11:29

回答ありがとうございました。この回答で無事動作致しました。このクラスのインプットは1000次元のベクトルを100こ用意することだと勘違いしていたのですが、x_listは、255までの乱数を1つだけ配列の要素にし、これを100こ配列に詰めたものだと思います。ここがエラーを起こさない原因がいまいちわかっていません。
can110

2017/04/11 11:57

RNNの動きがイメージできていないので私にも分かりません。 逆に言えば、チュートリアルの説明を熟読することで理解できるのではないかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問