LSTMを使用して文章作成しようと思っています。
以下のコードを実行すると、下のエラー文が表示されます。
エラーの内容を調べてみたのですがよく分からなかったので質問させてください
python
1from keras.models import Sequential 2from keras.layers import Dense, Activation, Dropout 3from keras.layers import LSTM 4from keras.optimizers import RMSprop 5from keras.utils.data_utils import get_file 6import numpy as np 7import random, sys 8 9path = "./tomizawa.txt" 10bindata = open(path, "rb").read() 11text = bindata.decode("utf-8") 12print('コーパスの長さ:', len(text)) 13 14# 一文字ずつバラバラにして文字にIDを振る 15chars = sorted(list(set(text))) 16print('使われている文字の数:', len(chars)) 17char_indices = dict((c, i) for i, c in enumerate(chars)) # 文字→ID 18indices_char = dict((i, c) for i, c in enumerate(chars)) # ID→文字 19 20# テキストをmaxlen文字で区切って、その文の次に来る文字を記録する 21maxlen = 20 22step = 3 23sentences = [] 24next_chars = [] 25for i in range(0, len(text) - maxlen, step): 26 sentences.append(text[i: i + maxlen]) 27 next_chars.append(text[i + maxlen]) 28print('学習する文の数:', len(sentences)) 29 30print('テキストをIDベクトルにします...') 31X = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool) 32y = np.zeros((len(sentences), len(chars)), dtype=np.bool) 33for i, sentence in enumerate(sentences): 34 for t, char in enumerate(sentence): 35 X[i, t, char_indices[char]] = 1 36 y[i, char_indices[next_chars[i]]] = 1 37 38 39# モデルを構築する(LSTM) 40print('モデルを構築します...') 41model = Sequential() 42model.add(LSTM(128, input_shape=(maxlen, len(chars)))) 43model.add(Dense(len(chars))) 44model.add(Activation('softmax')) 45 46optimizer = RMSprop(lr=0.01) 47model.compile(loss='categorical_crossentropy', optimizer=optimizer) 48 49# 選択候補となる配列から値を取り出す 50def sample(preds, temperature=1.0): 51 preds = np.asarray(preds).astype('float64') 52 preds = np.log(preds) / temperature 53 exp_preds = np.exp(preds) 54 preds = exp_preds / np.sum(exp_preds) 55 probas = np.random.multinomial(1, preds, 1) 56 return np.argmax(probas) 57 58# 学習させて、テキストを生成する・・・を繰り返す 59for iteration in range(1, 60): 60 print() 61 print('-' * 50) 62 print('繰り返し=', iteration) 63 model.fit(X, y, batch_size=128, nb_epoch=1) # 訓練 64 # ランダムにテキストのシードを選ぶ 65 start_index = random.randint(0, len(text) - maxlen - 1) 66 # 多様性のパラメータごとに文を生成する 67 for diversity in [0.2, 0.5, 1.0, 1.2]: 68 print() 69 print('---多様性=', diversity) 70 generated = '' 71 sentence = text[start_index: start_index + maxlen] 72 generated += sentence 73 print('---シード="' + sentence + '"') 74 sys.stdout.write(generated) 75 # シードを元にテキストを自動で生成する 76 for i in range(400): 77 x = np.zeros((1, maxlen, len(chars))) 78 for t, char in enumerate(sentence): 79 x[0, t, char_indices[char]] = 1. 80 # 次に来る文字を予測 81 preds = model.predict(x, verbose=0)[0] 82 next_index = sample(preds, diversity) 83 next_char = indices_char[next_index] 84 # 既存の文に予測した一文字を足す 85 generated += next_char 86 sentence = sentence[1:] + next_char 87 sys.stdout.write(next_char) 88 sys.stdout.flush() 89 print() 90 91 92 93
エラー文
python
1コーパスの長さ: 796 2使われている文字の数: 172 3学習する文の数: 259 4テキストをIDベクトルにします... 5モデルを構築します... 6TypeError: Expected int32, got list containing Tensors of type '_Message' instead.
tomizawa.txtの内容
30円のお返しです。ありがとうございましたー! いらっしゃいませこんにちはー!いらっしゃいませこんにちはー!いらっしゃいませこんにちはー! こちらでお召し上がりですか? ソルトレイクの方で… テイクアウト。 お客さん(笑)。踏んでますよ。 ビッグバーガーを千個? 今からお作りしますんで、5時間少々よろしいですか? 千個ってなったら厨房担当者が… セット? セットをおひとつ? お飲み物はどうなさいますか? バナナシェイクで…。サイズの方、S・M・A・L・Lがございますけれども。 はい。 おっきいコップがまだ来てないんで。 すいません。 はい。 えー、ご一緒にビッグバーガーセットはいかがですか? サイドメニュー?ご一緒に(※ポテトの発音で)ホタテはいかがですか? ご一緒に~!ホタテはいかがですか? おふたつ? 以上で? それでは、厨房の方を振り返ります。 注文の方、繰り返します。 ビッグバーガーセットがおひとつ。お飲み物バナナシェイクでよろしかったですか? はい。 あ、すいません。 はい。 はい。お飲み物、バナーナシェイクで… あ。ですか~?の方ですか~? ビッグセットワン。バナナシェイク。プリーズヘルプミー。 (※レジのボタンを激しく叩く仕草) お会計630円で… カルロスの方の… 630円です。 はい。 はい。30円のお返しです。 あと、これ500円以上お買い上げの方に差し上げてるんですけど。 レシートです。 お箸は2膳でよろしかったですか? シェイクの方、砂糖とミルクお付けしますか? お待たせしましたー。 こちら、つまんないものです。 あの、今キャンペーンやってまして。 こちら、スクラッチ削ってもらってよろしいですか? ちょっと何言ってるか分かんない。 いろんな商品が当たります。 おめでとうございます!1等なります! 1等、(※ポテトの発音で)ホタテになります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/07 17:21