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

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

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

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

Python

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

Q&A

解決済

1回答

391閲覧

list index out of range のエラー修正

sakuragi

総合スコア15

Chainer

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

Python

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

0グッド

0クリップ

投稿2017/10/22 09:32

コード import numpy as np 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.links as L import chainer.functions as F xp = cuda.cupy import math import sys argvs = sys.argv vocab = {} def load_data(filename): global vocab words = open(filename).read().replace('\n','<eos>').strip().split() dataset = xp.ndarray((len(words),),dtype=xp.int32) for i, word in enumerate(words): if word not in vocab: vocab[word] = len(vocab) dataset[i] = vocab[word] return dataset class MyRNN(chainer.Chain): def __init__(self,v,k): super(MyRNN,self).__init__(embed = L.EmbedID(v,k), H = L.Linear(k,k), W = L.Linear(k,v), ) def __call__(self,s): accum_loss = None v,k = self.embed.W.data.shape h = Variable(xp.zeros((1,k),dtype=xp.float32)) for i in range(len(s)): next_w_id = eos_id if (i == len(s) - 1) else s[i+1] tx = Variable(xp.array([next_w_id],dtype = xp.int32)) x_k = self.embed(Variable(xp.array([s[i]],dtype=xp.int32))) h = F.tanh(x_k + self.H(h)) loss = F.softmax_cross_entropy(self.W(h),tx) accum_loss = loss if accum_loss is None else accum_loss + loss return accum_loss train_data = load_data('ptb.train.txt') demb = 100 def cal_ps(model,s): h = Variable(xp.zeros((1,demb), dtype=xp.float32)) sum = 0.0 for i in range(1,len(s)): w1, w2 = s[i-1], s[i] x_k = model.embed(Variable(xp.array([w1], dtype=xp.int32))) h = F.tanh(x_k + model.H(h)) yv = F.softmax(model.W(h)) pi = yv.data[0][w2] sum -= math.log(pi, 2) return sum eos_id = vocab['<eos>'] max_id = len(vocab) test_data = load_data('ptb.test.txt') test_data = test_data[0:1000] model = MyRNN(len(vocab), demb) cuda.get_device(0).use() model.to_gpu() #optimizer = optimizers.Adam() #optimizer.setup(model) serializers.load_npz(argvs[1], model) sum = 0.0 wnum = 0 s = [] unk_word = 0 for pos in range(len(test_data)): id = test_data[pos] s.append(id) if (id > max_id): unk_word = 1 if (id == eos_id): if(unk_word != 1): ps = cal_ps(model,s) sum += ps wnum += len(s) - 1 else: unk_word = 0 s = [] print (math.pow(2, sum / wnum))

chainrでeval-rnnのサンプルコードを動かしてみたのですが、以下のエラーが出てしまいました。
出力として言語モデルの評価値をだそうとしています。
serializers.load_npz(argvs[1], model)
Error: list index out of range
どの部分がおかしいのでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

実行の仕方を間違えているのだと思います。
コマンドライン引数を正しく指定してください。

Chainerのリファレンスを見ると、次のように書いてありますね。

chainer.serializers.load_npz(filename, obj, path='', strict=True)
Loads an object from the file in NPZ format.

(中略)

Parameters:
・ filename (str) – Name of the file to be loaded.

ついでに、実験コードを置いときます。

hoge.py

Python

1import sys 2print(sys.argv[1])
>python hoge.py Traceback (most recent call last): File "hoge.py", line 2, in <module> print(sys.argv[1]) IndexError: list index out of range >python hoge.py nishiko nishiko

投稿2017/10/22 10:47

編集2017/10/22 11:03
LouiS0616

総合スコア35660

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問