Я пытаюсь применить уровень внимания к CRNN Econder и Decoder
, но возникает ошибка, не могу понять, что это означает?
Уровень внимания
Входные данные представляют собой тензор запроса формы [ batch_size, Tq, dim], тензор значений формы [batch_size, Tv, dim] и ключевой тензор формы [batch_size, Tv, dim]. Расчет выполняется следующим образом:
Вычислить оценки с помощью shape [batch_size, Tq, Tv] как точечного произведения ключа запроса: scores = tf.matmul (query, key, transpose_b = True).
Используйте баллы для расчета распределения с формой [batch_size, Tq, Tv]: distribution = tf.nn.softmax (scores).
- Используйте распределение для создания линейной комбинации значения с формой batch_size, Tq, dim]: return tf.matmul (distribution, value).
cnn = MaxPooling2D(pool_size=(1,2), strides=(1,2), padding="valid")(cnn)
shape = cnn.get_shape()
nb_units = shape[2] * shape[3]
gru = Reshape((shape[1], nb_units))(cnn)
gru, forward_h, forward_c, backward_h, backward_c = Bidirectional \
(LSTM
(nb_units,
dropout=0.2,
return_sequences=True,
return_state=True,
recurrent_activation='relu',
recurrent_initializer='glorot_uniform'))(gru)
state_h = tf.keras.layers.Concatenate()([forward_h, backward_h])
state_c = tf.keras.layers.Concatenate()([forward_c, backward_c])
gru, attention_weights = Attention(32)([gru, state_h])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-10-1b228a635105> in <module>()
4 # note: `learning_rate=None` will get architecture default value
5 model = HTRModel(architecture=arch, input_size=input_size, vocab_size=dtgen.tokenizer.vocab_size)
----> 6 model.compile(learning_rate=0.001)
7
8 # save network summary
C:\Users\a.abdallah\Desktop\handwritten-text-recognition\src\network\model.py in compile(self, learning_rate)
134
135 # define inputs, outputs and optimizer of the chosen architecture
--> 136 outs = self.architecture(self.input_size, self.vocab_size + 1, learning_rate)
137 inputs, outputs, optimizer = outs
138
C:\Users\a.abdallah\Desktop\handwritten-text-recognition\src\network\model.py in abdo(input_size, d_model, learning_rate)
571
572
--> 573 gru, attention_weights = Attention(32)([gru, state_h])
574
575
c:\users\a.abdallah\anaconda3\envs\handwritten\lib\site-packages\tensorflow_core\python\framework\ops.py in __iter__(self)
546 if shape[0] is None:
547 raise TypeError(
--> 548 "Cannot iterate over a tensor with unknown first dimension.")
549 for i in xrange(shape[0]):
550 yield self[i]
TypeError: Cannot iterate over a tensor with unknown first dimension.