x_haiku[0,char_indices[char]] = 1.で
IndexError: index 3 is out of bounds for axis 1 with size 2
と出ました。
これは、numpyで要素の範囲外を示すエラーで、
今回の場合、行列の要素3が、1から2までにない。ということを示しているはずなのですが、周辺の数字を変えても直せません。
Numpyで行列の範囲外を切り抜くとどうなるか
poem.txtは、
朝霧 の 中 に 九段 の ともし 哉 あたたか な 雨 が 降る なり 枯葎 菜の花 や は つと 明るき 町 は づれ 秋風 や 伊予 へ 流る る 汐 の 音 長閑 さ や 障子 の 穴 に 海 見え て
python
1import numpy as np 2import codecs 3from keras.layers import Activation, Dense, Input 4from keras.models import Model 5import sys 6 7#データの読み込み 8with open(r'/home/hoge/Desktop/data/haiku.txt', encoding='utf-8') as f: 9 poems = f.readlines() 10 for p in poems: 11 s = p.rstrip() # 改行を除去 12 s = s.split(' ') 13 14# 文字をID変換 15char_indices = dict((c, i) for i, c in enumerate(chars)) 16# IDから文字へ変換 17indices_char = dict((i, c) for i, c in enumerate(chars)) 18#テキストを2文字ずつ読み込む 19maxlen = 2 20#サンプルバッチ数 21step = 2 22sentences = [] 23for i in range(0, len(poems) - maxlen, step): 24 sentences.append(poems[i: i + maxlen]) 25 26#ベクトル化する 27x = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool) 28for i, sentence in enumerate(sentences): 29 for t, char in enumerate(sentence): 30 x[i, t, char_indices[char]] = 10 31 32#encoderの次元 33encoding_dim = 128 34#入力用の変数 35input_word = Input(shape=(maxlen, len(chars))) 36#入力された語がencodeされたものを格納する 37encoded = Dense(128, activation='relu')(input_word) 38encoded = Dense(64, activation='relu')(encoded) 39encoded = Dense(32, activation='relu')(encoded) 40latent = Dense(8, activation='relu')(encoded) 41#encodeされたデータを再構成 42decoded = Dense(32, activation='relu')(latent) 43decoded = Dense(64, activation='relu')(decoded) 44decoded = Dense(39065, activation='relu')(encoded) 45autoencoder = Model(inputs=input_word, outputs=decoded) 46# #Adamで最適化、loss関数をcategorical_crossentropy 47autoencoder.compile(optimizer='Adam', loss='categorical_crossentropy') 48#アレイサイズの確認 49print(x.shape) 50 51autoencoder.fit(x, x, 52 epochs=50, 53 batch_size=3, 54 shuffle=False) 55 56for i in range(17): 57 x_haiku = np.zeros((1, maxlen, len(chars))) 58 for t, char in enumerate(sentence): 59 x_haiku[0,char_indices[char]] = 1. 60 sentence = sentence[:-1] 61print(char)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/26 04:32
2018/10/26 04:35
2018/10/26 04:50
2018/10/26 04:53
2018/10/26 04:57 編集
2018/10/26 05:11