Ошибка типа Tensorflow уровня Attension: невозможно выполнить итерацию по тензору с неизвестным первым измерением - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь применить уровень внимания к CRNN Econder и Decoder
, но возникает ошибка, не могу понять, что это означает?
Уровень внимания
Входные данные представляют собой тензор запроса формы [ batch_size, Tq, dim], тензор значений формы [batch_size, Tv, dim] и ключевой тензор формы [batch_size, Tv, dim]. Расчет выполняется следующим образом:

  1. Вычислить оценки с помощью shape [batch_size, Tq, Tv] как точечного произведения ключа запроса: scores = tf.matmul (query, key, transpose_b = True).

  2. Используйте баллы для расчета распределения с формой [batch_size, Tq, Tv]: distribution = tf.nn.softmax (scores).

  3. Используйте распределение для создания линейной комбинации значения с формой 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.
...