У меня есть список массивов, которые я хотел бы изменить. Каждый массив — это проба, столбцы в каждом массиве — это характеристика, а строки в каждом массиве — это временной шаг. Я бы хотел, чтобы список был изменен на (пробная версия, временной интервал, функция). Например, D
— это то, что я пытаюсь преобразовать в 3D-массив — временные интервалы неодинаковы.
A = np.random.rand(3,10) #Trial 1 has 3 timesteps and ten features
B = np.random.rand(10,10) #Trial 2 has 10 timesteps and ten features
C = np.random.rand(7,10) #Trial 3 has 7 timesteps and ten features
D = [A,B,C,D] #Data as given in the form of a list
Как я могу получить трехмерный массив с переменными временными шагами? Я пытаюсь использовать это как вход в нейронную сеть keras.
Что такое приложение? вам разрешено интерполировать между временными шагами, чтобы сделать все испытания равными?
@sai Это приложение для классификации последовательностей. Основываясь на том, что сказал Куангхоанг, я просто добавлю массивы, а затем изменю форму.
Возможно, это не лучшая идея, но не стесняйтесь попробовать. Однако я бы попытался понизить дискретизацию всех испытаний до 3 временных шагов или повысить дискретизацию менее частых испытаний, если бы у меня было представление о том, что представляют собой функции и как они могут варьироваться в зависимости от их физики.
Вы можете сделать следующее:
D = tf.ragged.stack([tf.RaggedTensor.from_tensor(x) for x in [A, B, C]])
Это дает неровный тензор формы: TensorShape([3, None, None])
Или
values = np.vstack([A, B, C])
D = tf.RaggedTensor.from_row_lengths(values, [x.shape[0] for x in [A, B, C]])
что дает рваный тензор формы: (3, None, 10)
Работа с рваными тензорами в keras может быть сложной.
Как правило, для большинства приложений лучше всего использовать разумное число для максимального размера последовательности и маскировать пустые последовательности. Для некоторых приложений, над которыми я работаю, это не очень привлекательный вариант, потому что у меня много документов с очень маленькими последовательностями, а затем некоторые с очень большими последовательностями. Но если вы не чувствуете себя комфортно с механикой keras/tensorflow, вам, вероятно, следует избегать использования рваных тензоров.
Проще говоря, вы не можете.