質問編集履歴

1

エラー内容の追加

2018/05/06 13:28

投稿

mizuwater
mizuwater

スコア11

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,4 @@
1
1
  以下のように、dynamic_rnn()を用いて、LSTM1層を組み込んだニューラルネットの学習を行っていたのですが、これをLSTM2層、3層と増やすにはどのように書き換えればいいのでしょうか?
2
-
3
-
4
-
5
- 単純にdynamic_rnn()とrnn_cell.BasicLSTMCell()を増やして、前のLSTM層の出力を次のLSTM層の入力に使うだけではエラーが出て動きませんでした。。
6
-
7
-
8
-
9
- ご存知の方、教えていただけると助かります。
10
2
 
11
3
 
12
4
 
@@ -45,3 +37,147 @@
45
37
  p_loss = tf.nn.softmax_cross_entropy_with_logits(logits=p_logit, labels=y)
46
38
 
47
39
  ```
40
+
41
+
42
+
43
+ dynamic_rnn()とrnn_cell.BasicLSTMCell()を増やして、以下のようなコードに書き換えてみたのですが、エラーが出て動きませんでした。。
44
+
45
+
46
+
47
+ ```python
48
+
49
+ import tensorflow as tf
50
+
51
+ X = tf.placeholder(tf.float32, [None,time_steps,input_row], name='X') # Input data
52
+
53
+
54
+
55
+ lstm_1 = tf.nn.rnn_cell.BasicLSTMCell(15)#
56
+
57
+ lstm_2 = tf.nn.rnn_cell.BasicLSTMCell(15)#
58
+
59
+
60
+
61
+ lstm_out_1,states_op = tf.nn.dynamic_rnn(lstm_1,X,dtype=tf.float32,time_major=False)#
62
+
63
+ lstm_out_2,states_op = tf.nn.dynamic_rnn(lstm_2,lstm_out_1,dtype=tf.float32,time_major=False)#
64
+
65
+ lstm_out_1_last = lstm_out_2[:,-1,:]
66
+
67
+
68
+
69
+ f = tf.cond(train, lambda: tf.slice(lstm_out_1_last, [0, 0], [batch_size // 2, -1]), lambda: lstm_out_1_last)
70
+
71
+ y = tf.cond(train, lambda: tf.slice(Y, [0, 0], [batch_size // 2, -1]), lambda: Y)
72
+
73
+
74
+
75
+ W1 = weight_variable([15, 2])
76
+
77
+ b1 = bias_variable([2])
78
+
79
+ p_logit = tf.matmul(f, W1) + b1
80
+
81
+ p = tf.nn.softmax(p_logit)
82
+
83
+ p_loss = tf.nn.softmax_cross_entropy_with_logits(logits=p_logit, labels=y)
84
+
85
+ ```
86
+
87
+ ### エラー内容
88
+
89
+ File "main.py", line 178, in <module>
90
+
91
+ build_model()
92
+
93
+ File "main.py", line 129, in build_model
94
+
95
+ lstm_out_2,states_op = tf.nn.dynamic_rnn(lstm_2,lstm_out_1,dtype=tf.float32,time_major=False)#
96
+
97
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 627, in dynamic_rnn
98
+
99
+ dtype=dtype)
100
+
101
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 824, in _dynamic_rnn_loop
102
+
103
+ swap_memory=swap_memory)
104
+
105
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 3224, in while_loop
106
+
107
+ result = loop_context.BuildLoop(cond, body, loop_vars, shape_invariants)
108
+
109
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2956, in BuildLoop
110
+
111
+ pred, body, original_loop_vars, loop_vars, shape_invariants)
112
+
113
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2893, in _BuildLoop
114
+
115
+ body_result = body(*packed_vars_for_body)
116
+
117
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 3194, in <lambda>
118
+
119
+ body = lambda i, lv: (i + 1, orig_body(*lv))
120
+
121
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 795, in _time_step
122
+
123
+ (output, new_state) = call_cell()
124
+
125
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn.py", line 781, in <lambda>
126
+
127
+ call_cell = lambda: cell(input_t, state)
128
+
129
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn_cell_impl.py", line 339, in __call__
130
+
131
+ *args, **kwargs)
132
+
133
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/layers/base.py", line 699, in __call__
134
+
135
+ self.build(input_shapes)
136
+
137
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/rnn_cell_impl.py", line 588, in build
138
+
139
+ shape=[input_depth + h_depth, 4 * self._num_units])
140
+
141
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/layers/base.py", line 546, in add_variable
142
+
143
+ partitioner=partitioner)
144
+
145
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/training/checkpointable.py", line 436, in _add_variable_with_custom_getter
146
+
147
+ **kwargs_for_getter)
148
+
149
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 1317, in get_variable
150
+
151
+ constraint=constraint)
152
+
153
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 1079, in get_variable
154
+
155
+ constraint=constraint)
156
+
157
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 425, in get_variable
158
+
159
+ constraint=constraint)
160
+
161
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 394, in _true_getter
162
+
163
+ use_resource=use_resource, constraint=constraint)
164
+
165
+ File "/usr/local/lib/python3.4/dist-packages/tensorflow/python/ops/variable_scope.py", line 733, in _get_single_variable
166
+
167
+ name, "".join(traceback.format_list(tb))))
168
+
169
+ ValueError: Variable rnn/basic_lstm_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:
170
+
171
+
172
+
173
+ File "main.py", line 128, in build_model
174
+
175
+ lstm_out_1,states_op = tf.nn.dynamic_rnn(lstm_1,X,dtype=tf.float32,time_major=False)#
176
+
177
+ File "main.py", line 178, in <module>
178
+
179
+ build_model()
180
+
181
+
182
+
183
+ ご存知の方、教えていただけると助かります。