@dBegginer

Как решить проблему с batch_size?

def construct_autoregressive_mask(target):
    """
        Args: Original target of word ids, shape [batch, seq_len]
        Returns: a mask of shape [batch, seq_len, seq_len].
    """
    batch_size, seq_len = target.shape.as_list()
    
    print(batch_size)

    tri_matrix = np.zeros((seq_len, seq_len))
    tri_matrix[np.tril_indices(seq_len)] = 1
    
    mask = tf.convert_to_tensor(tri_matrix, dtype=tf.float32)

    masks = tf.tile(tf.expand_dims(mask, 0), (batch_size, 1, 1))  # copies
    return masks


Выдает ошибку:
TypeError: Failed to convert object of type to Tensor. Contents: (None, 1, 1). Consider casting elements to a supported type.

Но если инициализировать batch_size (Например сразу указать, что он равен 64 или создать placeholder) ошибки нет.
Можно ли решить проблему без этих действий?
  • Вопрос задан
  • 212 просмотров
Решения вопроса 1
@ivodopyanov
NLP, python, numpy, tensorflow
Использовать tf.shape(target) для получения тензора с формой другого тензора, размер которого может меняться от шага к шагу.

Tensorflow, кстати, умеет автоматически приводить формы. Если сложить тензор А с формой (K, L, M) и тензор B с формой (1, L, M), то TF автоматом скопирует B по первой оси K раз, а при сложении тензоров с формами (K, 1) и (1, L) тоже скопирует оба и результат будет формы (K, L): https://www.tensorflow.org/xla/broadcasting
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы