Мне нужно построить специальный тип нейронной сети в Керасе, который в некоторой точке слоя принимает многомерный массив с N строками и 5 элементами в каждом ряду.Давайте назовем этот многомерный массив как bboxes . bboxes выглядит так:
[[ 0, x1, x2, y1, y2] # row 0
...
[ 0, x1, x2, y1, y2]] # row N
Итак, как вы видите, количество строк не определено.Все, что мы знаем, это то, что это массив, полный строк, где каждая строка содержит 5 целых чисел.
Следовательно, я мог бы создать следующий вход для bboxes :
from keras.layers import Input
bboxes = Input(shape=(None, 5), dtype='int32', name='bboxes')
Проблема:
Я должен передать bboxes на пользовательский слой с именем MyLayer , который в некоторой строке метода вызова необходимо получитьколичество строк в bboxes :
from keras.engine.topology import Layer
class MyLayer(Layer):
def __init__(self):
...
...
def call(x):
...
N = x.shape[0] # Get amount of rows (N) of bboxes
...
...
Но, как вы, возможно, уже знаете, у Keras есть определенный тип архитектуры, который сначала определяется пустыми объектами фигур.
Фактическое целочисленное значение N
передается после компиляции модели.Поэтому вместо целого числа N
возвращается ?
, который по сути является пустым тензором ...
Но переменная N = x.shape[0]
в виде целого числа важна для правильной работы MyLayer
.Я мог бы сделать что-то вроде range(0, N)
, которое вернет следующую ошибку:
TypeError: int должен вернуть объект int
Я очень запуталсяо функциональном API Keras, когда дело доходит до таких проблем.Есть ли какой-нибудь аккуратный способ передать массив bboxes
с произвольно определенным количеством строк (N
) в MyLayer
, который позже будет использовать фактическое значение N
?
Короче , как мне передать ввод с формой (N, 5) слою, чтобы слой знал точное число N?
Я был бы очень признателен, если бы был какой-либо способ решения этой проблемы.Спасибо!