Выходным слоем моей функциональной модели Keras является тензор x
размерности (None, 1344, 2)
.Я хочу извлечь n < 1344
записей из 2-го измерения x
и создать новый тензор y
размера (None, n, 2)
.
Кажется простым извлекать n
последовательных записей простым доступом к x[:, :n,:]
, но (на первый взгляд) сложно, если индексы n
непоследовательны.Есть ли в Керасе чистый способ сделать это?
Вот мои подходы.
Эксперимент 1 (Разрезание тензора, последовательные индексы, работы):
print('My tensor shape is', K.int_shape(x)) #my tensor
(None, 1344, 2) # as printed in my code
print('Slicing first 5 entries, shape is', K.int_shape(x[:, :5, :]))
(None, 5, 2) # as printed in my code, works!
Эксперимент 2 (индексирование тензора при произвольных индексах завершается неудачей)
print('My tensor shape is', K.int_shape(x)) #my tensor
(None, 1344, 2) # as printed in my code
foo = np.array([1,2,4,5,8])
print('arbitrary indexing, shape is', K.int_shape(x[:,foo,:]))
Keras возвращает следующую ошибку:
ValueError: Shapes must be equal rank, but are 1 and 0
From merging shape 1 with other shapes. for 'strided_slice_17/stack_1' (op:
'Pack') with input shapes: [], [5], [].
Эксперимент 3 (серверная часть тензорного потокаЯ также попробовал K.backend.gather
, но его использование неясно, потому что 1) Документация Keras гласит, что индексы должны быть тензором целых чисел, и нет эквивалента Keras, равного numpy.where
, если моя цель - извлечь записи в x
удовлетворяя определенному условию, и 2) K.backend.gather
, кажется, извлекает записи из axis = 0
, тогда как я хочу извлечь из второго измерения x
.