Open DaozeZhang opened 11 months ago
Hi, I'm facing the same problem,
I tried tf.map_fn
to fix TypeError: Tensor objects are only iterable when eager execution is enabled. To iterate over this tensor use tf.map_fn
issues. My updated function is:
with tf.variable_scope("seq_frame_attention_layer"):
self.seq_attention_out1 = tf.map_fn(lambda x: attention(x, self.config.seq_attention_size1), seq_rnn_out1)
print(self.seq_attention_out1.get_shape())
But it throws other error:
(?, 29, 128)
Traceback (most recent call last):
File "train_xsleepnet2.py", line 356, in <module>
net = XSleepNet(config=config)
File "D:\Smartbed\xsleepnet\sleepedf-78\tensorflow_nets\xsleepnet2\xsleepnet.py", line 26, in __init__
self.construct_seqsleepnet()
File "D:\Smartbed\xsleepnet\sleepedf-78\tensorflow_nets\xsleepnet2\xsleepnet.py", line 195, in construct_seqsleepnet
self.seq_attention_out1 = tf.map_fn(lambda x: attention(x, self.config.seq_attention_size1), seq_rnn_out1)
File "C:\Users\DELL\.conda\envs\xsleep\lib\site-packages\tensorflow\python\ops\functional_ops.py", line 497, in map_fn
maximum_iterations=n)
File "C:\Users\DELL\.conda\envs\xsleep\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 3556, in while_loop
return_same_structure)
File "C:\Users\DELL\.conda\envs\xsleep\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 3087, in BuildLoop
pred, body, original_loop_vars, loop_vars, shape_invariants)
File "C:\Users\DELL\.conda\envs\xsleep\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 3022, in _BuildLoop
body_result = body(*packed_vars_for_body)
File "C:\Users\DELL\.conda\envs\xsleep\lib\site-packages\tensorflow\python\ops\control_flow_ops.py", line 3525, in <lambda>
body = lambda i, lv: (i + 1, orig_body(*lv))
File "C:\Users\DELL\.conda\envs\xsleep\lib\site-packages\tensorflow\python\ops\functional_ops.py", line 486, in compute
packed_fn_values = fn(packed_values)
File "D:\Smartbed\xsleepnet\sleepedf-78\tensorflow_nets\xsleepnet2\xsleepnet.py", line 195, in <lambda>
self.seq_attention_out1 = tf.map_fn(lambda x: attention(x, self.config.seq_attention_size1), seq_rnn_out1)
File "D:\Smartbed\xsleepnet\sleepedf-78\tensorflow_nets\xsleepnet2\nn_basic_layers.py", line 151, in attention
hidden_size = inputs_shape[2].value # hidden size of the RNN layer
File "C:\Users\DELL\.conda\envs\xsleep\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 788, in __getitem__
return self._dims[key]
IndexError: list index out of range
@pquochuy could you please share your working environment, TensorFlow and Cuda version?
I have to update function attention in file nn_basic_layers.py
to
def attention(inputs, attention_size, time_major=False):
if isinstance(inputs, tuple):
# In case of Bi-RNN, concatenate the forward and the backward RNN outputs.
inputs = tf.concat(inputs, 2)
if time_major:
# (T,B,D) => (B,T,D)
inputs = tf.array_ops.transpose(inputs, [1, 0, 2])
inputs_shape = inputs.shape
sequence_length = inputs_shape[0].value # the length of sequences processed in the antecedent RNN layer
hidden_size = inputs_shape[1].value # hidden size of the RNN layer
# Attention mechanism
W_omega = tf.Variable(lambda: tf.random_normal([hidden_size, attention_size], stddev=0.1))
b_omega = tf.Variable(lambda: tf.random_normal([attention_size], stddev=0.1))
u_omega = tf.Variable(lambda: tf.random_normal([attention_size], stddev=0.1))
But I am not sure if the index is correct or not. From sequence_length = inputs_shape[1].value
to sequence_length = inputs_shape[1].value
, and hidden_size = inputs_shape[2].value
to hidden_size = inputs_shape[1].value
I have to update function attention in file
nn_basic_layers.py
todef attention(inputs, attention_size, time_major=False): if isinstance(inputs, tuple): # In case of Bi-RNN, concatenate the forward and the backward RNN outputs. inputs = tf.concat(inputs, 2) if time_major: # (T,B,D) => (B,T,D) inputs = tf.array_ops.transpose(inputs, [1, 0, 2]) inputs_shape = inputs.shape sequence_length = inputs_shape[0].value # the length of sequences processed in the antecedent RNN layer hidden_size = inputs_shape[1].value # hidden size of the RNN layer # Attention mechanism W_omega = tf.Variable(lambda: tf.random_normal([hidden_size, attention_size], stddev=0.1)) b_omega = tf.Variable(lambda: tf.random_normal([attention_size], stddev=0.1)) u_omega = tf.Variable(lambda: tf.random_normal([attention_size], stddev=0.1))
But I am not sure if the index is correct or not. From
sequence_length = inputs_shape[1].value
tosequence_length = inputs_shape[1].value
, andhidden_size = inputs_shape[2].value
tohidden_size = inputs_shape[1].value
Hello, did this modification work well? wasn't there any error during execution?
Hello! Thank you for this amazing work! I'm trying to run the xsleepnet1 on my machine. I have installed the environments (TensorFlow 1.13, Cuda10.0 and cudnn7), but I still met a problem that I cannot solve. In the file
sleepedf-78/tensorflow_nets/xsleepnet1.py
, there are codes in line 194~196:When the code execution reached line 195:
I met an ERROR:
TypeError: Tensor objects are only iterable when eager execution is enabled. To iterate over this tensor use tf.map_fn.
I knew then I should open the eager execution, so I addedtf.enable_eager_execution()
to the top oftrain_xsleepnet1.py
. But unfortunately, this error still occurred... I also tried usingtf.map_fn
to solve the error, like this: (the input args ofattention()
is modified accordingly)But another error occurred:
ValueError: slice index 0 of dimension 0 out of bounds. for 'seq_frame_attention_layer/map_1/TensorArrayUnstack_1/strided_slice' (op: 'StridedSlice') with input shapes: [0], [1], [1], [1] and with computed input tensors: input[1] = <0>, input[2] = <1>, input[3] = <1>.
Could you please tell me how to solve this problem? Thank you very much!