Numpy (n, 1, м) до (n, м) - PullRequest
       21

Numpy (n, 1, м) до (n, м)

0 голосов
/ 06 ноября 2018

Я работаю над проблемой, которая включает партию из 19 токенов с 400 функциями. Я получаю форму (19, 1400), когда объединяю два вектора размером (1, 200) в конечный вектор признаков. Если я сжимаю 1, у меня остается (19,), но я пытаюсь получить (19,400). Я пытался преобразовать в список, сжимая и расправляясь, но ничего не получалось.

Есть ли способ преобразовать этот массив в правильную форму?

def attn_output_concat(sample):
  out_h, state_h = get_output_and_state_history(agent.model, sample)
  attns = get_attentions(state_h)
  inner_outputs = get_inner_outputs(state_h)
  if len(attns) != len(inner_outputs):
    print 'Length err'
  else:
    tokens = [np.zeros((400))] * largest
    print(tokens.shape)
    for j, (attns_token, inner_token) in enumerate(zip(attns, inner_outputs)):
      tokens[j] = np.concatenate([attns_token, inner_token], axis=1)
    print(np.array(tokens).shape)
    return tokens

1 Ответ

0 голосов
/ 06 ноября 2018

Самый простой способ - объявить токены массивом numpy.shape = (19 400) для начала. Это также более эффективно использует память и время. Вот соответствующая часть вашего кода пересмотрено ...

import numpy as np
attns_token = np.zeros(shape=(1,200))
inner_token = np.zeros(shape=(1,200))
largest = 19
tokens = np.zeros(shape=(largest,400))
for j in range(largest):
    tokens[j] = np.concatenate([attns_token, inner_token], axis=1)
print(tokens.shape)

Кстати: людям будет сложно помочь вам, если вы не включите автономный и работающий сегмент кода (возможно, именно поэтому вы еще не получили ответ на этот вопрос). Что-то вроде приведенного выше фрагмента предпочтительнее и поможет вам получить более точные ответы, потому что меньше гаданий о том, что вы пытаетесь сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...