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

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

ただいまの
回答率

91.02%

  • Python

    5533questions

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

  • Chainer

    94questions

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

list index out of range のエラー修正

解決済

回答 1

投稿

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

sakuragi

score 4

コード
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
どの部分がおかしいのでしょうか。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

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

import sys
print(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

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

  • 解決済

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

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

  • 解決済

    chainerのImportError: No module

    前提・実現したいこと https://github.com/mitmul/deeppose こちらのdeep poseを実装中のエラーです サーバー上に全てのデータを置き、チュ

  • 解決済

    ニューラルネットワークを使い「掛け算」の学習をしたい

    chainerを使って、ニューラルネットワークの勉強をしています。 先日はモデル・オプティマイザーの保存についてご教示いただきありがとうございました。 引き続き、色々調査してい

  • 解決済

    chainerによるCNN構築時のエラーに対処できません。

    現在、CNNを用いて画像の2値分類を実行しようとしています。 画像は縦5横20チャンネル数3で、それぞれに0か1が割り当てられています。 またそれぞれの画像は1枚ずつあります(訓練

  • 解決済

    chainerサンプルコードtrain_mnist.pyのエラー

    前提・実現したいこと githubから以下の公式chainerファイルをクローンし サンプルコードtest_mnist.py を実行したらエラーが返ってきました どなたか解決方法を

  • 解決済

    chainerのNStepLSTMを使う際、backwardを呼んだときにエラーが出る

    前提・実現したいこと chainerのNStepLSTMを用いて分類器を作成したいのですが、backwardを呼んだときにエラーが発生してしまい上手くいきません。 最終ステップの出

  • 解決済

    データセットの作り方がわからない

     前提・実現したいこと 「ゼロから作るディープラーニング」を読み終えた学生です。 せっかくディープラーニングをかじり始めたため、自分に役に立つことをディープラーニングを利用してやっ

  • 受付中

    AttributeErrorについて質問です。

     前提・実現したいこと ディープラーニングについて勉強したいと思い公開されていたプログラム(MNISTデータの正解数と正解率を出すプログラム)を実際に動かそうとしてみたら以下のエラ

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

  • Python

    5533questions

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

  • Chainer

    94questions

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