У меня есть уникальная реализация, где я должен обрабатывать видео с динамической частотой кадров (то есть количество кадров различно для каждого видео в пакете).Я складываю все кадры в один тензор и обрабатываю их с этого момента.Это прекрасно работает со слоем Conv2D, но создание 2D-тензора (batch_size, feature) с помощью операции выравнивания должно быть передано в плотный слой.Я не могу найти подходящий способ для реализации этого.
Для получения дополнительной информации о том, почему это должно быть так, пожалуйста, изучите: эта ссылка при обучении экземпляра машины .Вместо изображений MNIST у меня есть несколько видео в одной сумке, каждое с переменным числом кадров
В настоящее время я реализую:
class models(Model):
def __init__(self,shape):
self.shape=shape
super(models,self).__init__()
self.model = Sequential()
self.model.add(Conv2D(64,(3,3), activation='relu',padding="same",strides=(1,1),input_shape=self.shape))
self.model.add(MaxPooling2D(pool_size=( 2, 2), strides=(2, 2),
padding='valid', name='pool1'))
self.model.add(Conv2D(128,(3,3), activation='relu',
padding='same', name='conv2',
strides=(1,1)))
self.model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),
padding='valid', name='pool2'))
self.model.add(Conv2D(256,(3,3), activation='relu',
padding='same', name='conv3a',
strides=(1,1)))
self.model.add(Conv2D(256,(3,3), activation='relu',
padding='same', name='conv3b',
strides=(1,1)))
self.model.add(MaxPooling2D(pool_size=( 2, 2), strides=( 2, 2),
padding='valid', name='pool3'))
self.model.add(Conv2D(512,(3,3), activation='relu',
padding='same', name='conv4a',
strides=(1,1)))
self.model.add(Conv2D(512,(3,3), activation='relu',
padding='same', name='conv4b',
strides=(1,1)))
self.model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),
padding='valid', name='pool4'))
self.model.add(Conv2D(512,(3,3), activation='relu',
padding='same', name='conv5a',
strides=(1,1)))
self.model.add(Conv2D(512,(3,3), activation='relu',
padding='same', name='conv5b',
strides=(1,1)))
self.model.add(ZeroPadding2D(padding=(1, 1)))
self.model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2),
padding='valid', name='pool5'))
self.model.add(Flatten())
self.model2=Sequential()
self.model2.add(Dense(100))
self.model2.add(Dense(50))
self.model2.add(Dense(1,activation="softmax"))
, затем реализую модель, используя в качестве:
def call(self,x):
mode1=self.model(x)
flat=Flatten()(mode1)
reshaped=tf.keras.backend.reshape(flat,(1,-1))
final = self.model2(reshaped)
return final
Последние плотные слои не выровнены должным образом, но они просто представлены в виде представления.