質問するログイン新規登録

質問編集履歴

5

typoを修正

2019/05/30 06:20

投稿

hukuda222
hukuda222

スコア13

title CHANGED
File without changes
body CHANGED
@@ -85,9 +85,9 @@
85
85
  ```
86
86
  をref.batch_scatter_updateの前の行に追記することでshapeのエラーはとりあえず出なくなりましたが、以下のエラーが出るようになりました。
87
87
  ```
88
- File "/home/lr/fujisyo/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 2772, in prod
88
+ File "/home/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 2772, in prod
89
89
  initial=initial)
90
- File "/home/lr/fujisyo/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 86, in _wrapreduction
90
+ File "/home/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 86, in _wrapreduction
91
91
  return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
92
92
  TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
93
93
  ```

4

追記を追加

2019/05/30 06:20

投稿

hukuda222
hukuda222

スコア13

title CHANGED
File without changes
body CHANGED
@@ -77,4 +77,18 @@
77
77
  Tensorflowのバージョンは1.13.1
78
78
  です。
79
79
 
80
- 解決策をご存知の方は教えていただけると幸いです。
80
+ 解決策をご存知の方は教えていただけると幸いです。
81
+
82
+ ## 追記
83
+ ```python
84
+ ref.set_shape(init_value().shape)
85
+ ```
86
+ をref.batch_scatter_updateの前の行に追記することでshapeのエラーはとりあえず出なくなりましたが、以下のエラーが出るようになりました。
87
+ ```
88
+ File "/home/lr/fujisyo/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 2772, in prod
89
+ initial=initial)
90
+ File "/home/lr/fujisyo/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/numpy/core/fromnumeric.py", line 86, in _wrapreduction
91
+ return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
92
+ TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'
93
+ ```
94
+ おそらくこれもinitial_valueに関数を指定しているせいで、typeがうまく参照されてないように思うのですが、直し方がわからないのでわかる方は教えていただけると幸いです。

3

誤字の修正

2019/05/30 06:19

投稿

hukuda222
hukuda222

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,16 +1,6 @@
1
1
  ## 実現したいこと
2
- BasicDecoderを継承したクラスのstep関数の内側でbatch_scatter_updateを使おうとしています。
2
+ BasicDecoderを継承したクラスのstep関数の内側でbatch_scatter_updateを使おうとしています。
3
3
 
4
- ## 問題が発生するまでの流れ
5
- 通常のBasicDecoderの代わりにそれを継承した以下のようなクラスを使おうとしました。
6
-
7
- RNNの内側でVariableを定義する際のinitial_valueにTensorをそのまま指定すると`ValueError: Initializer for variable model/decoder/while/BasicDecoderStep/Variable/ is from inside a control-flow construct, such as a loop or conditional. When creating a variab
8
- le inside a loop or conditional, use a lambda as the initializer.`
9
- と言うエラーが発生するためTensorではなく関数をinitial_valueに指定しました。
10
-
11
- それによってbatch_scatter_updateの出力のshapeが<unknown>になり、そのせいでその後の処理のshapeを参照する箇所で以下のエラーが出てしまっているように思われます。
12
-
13
-
14
4
  ## ソースコード(簡単のためにあまり意味がないコードになっています)
15
5
  ```python
16
6
  import tensorflow as tf
@@ -71,7 +61,16 @@
71
61
  x_static_shape.dims[1].value, x_static_shape.dims[0].value
72
62
  TypeError: 'NoneType' object is not subscriptable
73
63
  ```
64
+ ## 問題が発生するまでの流れ
65
+ 通常のBasicDecoderの代わりにそれを継承した以下のようなクラスを使おうとしました。
74
66
 
67
+ RNNの内側でVariableを定義する際のinitial_valueにTensorをそのまま指定すると`ValueError: Initializer for variable model/decoder/while/BasicDecoderStep/Variable/ is from inside a control-flow construct, such as a loop or conditional. When creating a variab
68
+ le inside a loop or conditional, use a lambda as the initializer.`
69
+ というエラーが発生するためTensorではなく関数をinitial_valueに指定しました。
70
+
71
+ それによってbatch_scatter_updateの出力のshapeが<unknown>になり、そのせいでその後の処理のshapeを参照する箇所で上記のエラーが出てしまっているように思われます。
72
+
73
+
75
74
  ## 環境
76
75
  OSはUbuntu 16.04.5
77
76
  Pythonのバージョンは3.6.8

2

詳細の記述を追加

2019/05/30 02:25

投稿

hukuda222
hukuda222

スコア13

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,17 @@
1
+ ## 実現したいこと
1
- TensorFlowのBasicDecoderを継承したクラスにて、step関数をオーバーライドしてbatch_scatter_updateを使った際に以下のエラーが生じまた。解決策をご存知の方は教えていただけると幸いです。
2
+ BasicDecoderを継承したクラスののstep関数の内側でbatch_scatter_updateを使おうとしていす。
2
3
 
4
+ ## 問題が発生するまでの流れ
5
+ 通常のBasicDecoderの代わりにそれを継承した以下のようなクラスを使おうとしました。
3
6
 
4
- ソースコード(簡単ためり意味がないコードになっています)
7
+ RNN内側でVariableを定義する際のinitial_valueTensorをそのまま指定ると`ValueError: Initializer for variable model/decoder/while/BasicDecoderStep/Variable/ is from inside a control-flow construct, such as a loop or conditional. When creating a variab
8
+ le inside a loop or conditional, use a lambda as the initializer.`
9
+ と言うエラーが発生するためTensorではなく関数をinitial_valueに指定しました。
10
+
11
+ それによってbatch_scatter_updateの出力のshapeが<unknown>になり、そのせいでその後の処理のshapeを参照する箇所で以下のエラーが出てしまっているように思われます。
12
+
13
+
14
+ ## ソースコード(簡単のためにあまり意味がないコードになっています)
5
15
  ```python
6
16
  import tensorflow as tf
7
17
  from tensorflow.contrib.seq2seq.python.ops import basic_decoder
@@ -49,7 +59,7 @@
49
59
  return (outputs, next_state, next_inputs, finished)
50
60
  ```
51
61
 
52
- エラーの内容
62
+ ## エラーの内容
53
63
  ```
54
64
  File "/home/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/tensorflow/contrib/seq2seq/python/ops/decoder.py", line 337, in dynam$c_decode
55
65
  final_outputs = nest.map_structure(_transpose_batch_time, final_outputs)
@@ -60,4 +70,12 @@
60
70
  File "/home/.pyenv/versions/anaconda3-5.3.1/envs/tensorflow_gpuenv/lib/python3.6/site-packages/tensorflow/python/ops/rnn.py", line 67, in _transpose_batch_time
61
71
  x_static_shape.dims[1].value, x_static_shape.dims[0].value
62
72
  TypeError: 'NoneType' object is not subscriptable
63
- ```
73
+ ```
74
+
75
+ ## 環境
76
+ OSはUbuntu 16.04.5
77
+ Pythonのバージョンは3.6.8
78
+ Tensorflowのバージョンは1.13.1
79
+ です。
80
+
81
+ 解決策をご存知の方は教えていただけると幸いです。

1

ソースコードの修正

2019/05/30 02:23

投稿

hukuda222
hukuda222

スコア13

title CHANGED
File without changes
body CHANGED
@@ -18,7 +18,7 @@
18
18
  self.batch_size_ = batch_size
19
19
  self.W = layers_core.Dense(
20
20
  self.internal_size, name="W", use_bias=False)
21
- self.index = tf.tile(tf.expand_dims(tf.range(self.internal_size), axis=0), [self.batch_size, 1])
21
+ self.index = tf.tile(tf.expand_dims(tf.range(self.internal_size), axis=0), [batch_size, 1])
22
22
 
23
23
 
24
24
  def step(self, time, inputs, state, name=None):
@@ -32,10 +32,10 @@
32
32
  return tf.tile(tf.zeros([1, self.target_vocab_size],
33
33
  dtype=tf.float32),
34
34
  [self.batch_size, 1])
35
- scatter = tf.batch_scatter_update(
36
- tf.Variable(
35
+ ref = tf.Variable(
37
- initial_value=init_value, validate_shape=False),
36
+ initial_value=init_value, validate_shape=False)
37
+ scatter = ref.batch_scatter_update(
38
- index, weight)
38
+ tf.IndexedSlices(weight, self.index))
39
39
  cell_outputs = scatter
40
40
 
41
41
  sample_ids = self._helper.sample(