第7章の文章生成プログラム、generate_text.pyについての質問です。
これの実行のために、rnnlm_gen.pyや第6章のrnnlm.pyを使用していて、
rnnlm.pyでTimeEmbeddingオブジェクト生成時に、common/time_layer.pyを使用していると思うのですが、
time_layer.pyをいくら変更しても、反映されません。
rnnlm.pyのpredict関数で使われてるforward関数は、time_layer.pyのTimeEmbeddingクラスのものではないのでしょうか?
rnnlm.py
python
1import sys 2sys.path.append('..') 3import numpy as np 4from common.time_layers import TimeLSTM,TimeAffine,TimeSoftmaxWithLoss,TimeEmbedding 5#from common.base_model import BaseModel 6 7 8class Rnnlm: 9 def __init__(self, vocab_size=10000, wordvec_size=100, hidden_size=100): 10 11 V, D, H = vocab_size, wordvec_size, hidden_size 12 rn = np.random.randn 13 14 # 重みの初期化 15 embed_W = (rn(V, D) / 100).astype('f') 16 17 lstm_Wx = (rn(D, 4 * H) / np.sqrt(D)).astype('f') 18 lstm_Wh = (rn(H, 4 * H) / np.sqrt(H)).astype('f') 19 lstm_b = np.zeros(4 * H).astype('f') 20 affine_W = (rn(H, V) / np.sqrt(H)).astype('f') 21 affine_b = np.zeros(V).astype('f') 22 23 # レイヤの生成 24 self.layers = [ 25 TimeEmbedding(embed_W), 26 TimeLSTM(lstm_Wx, lstm_Wh, lstm_b, stateful=True), 27 TimeAffine(affine_W, affine_b) 28 ] 29 30 self.loss_layer = TimeSoftmaxWithLoss() 31 self.lstm_layer = self.layers[1] 32 33 # すべての重みと勾配をリストにまとめる 34 self.params, self.grads = [], [] 35 for layer in self.layers: 36 self.params += layer.params 37 self.grads += layer.grads 38 39 def predict(self, xs): 40 for layer in self.layers: 41 xs = layer.forward(xs) 42 43 return xs 44 45 def forward(self, xs, ts): 46 47 score = self.predict(xs) 48 loss = self.loss_layer.forward(score, ts) 49 50 return loss 51 52 def backward(self, dout=1): 53 dout = self.loss_layer.backward(dout) 54 for layer in reversed(self.layers): 55 dout = layer.backward(dout) 56 return dout 57 58 def reset_state(self): 59 self.lstm_layer.reset_state()
上のコードのself.layersでTimeEmbeddingオブジェクトを生成してると思うのですが、
time_layer.py
python
1class TimeEmbedding: 2 def __init__(self, W): 3 4 self.params = [W] 5 self.grads = [np.zeros_like(W)] 6 self.layers = None 7 self.W = W 8 9 10 def forward(self, xs): 11 N, T = xs.shape 12 V, D = self.W.shape 13 14 out = np.empty((N, T, D), dtype='f') 15 self.layers = [] 16 17 for t in range(T): 18 layer = Embedding(self.W) 19 out[:, t, :] = layer.forward(xs[:, t]) 20 self.layers.append(layer) 21 22 return out 23 24 def backward(self, dout): 25 N, T, D = dout.shape 26 27 grad = 0 28 for t in range(T): 29 layer = self.layers[t] 30 layer.backward(dout[:, t, :]) 31 grad += layer.grads[0] 32 33 self.grads[0][...] = grad 34 return None 35
上のtime_layer.pyをいくらいじっても、何の反映もありません。
https://github.com/oreilly-japan/deep-learning-from-scratch-2/blob/master/ch07/generate_text.py
time_layer.pyの全体をコメントアウトしても、何の反映もなく、generate_text.pyは実行されます。
Anaconda、jupyter notebook使用。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/17 16:57
2019/03/17 18:04
2019/03/18 00:20
2019/03/18 00:39
2019/03/18 01:08