Python Keras将一系列有序列表作为输入?

Python Keras将一系列有序列表作为输入?,python,keras,deep-learning,cv2,Python,Keras,Deep Learning,Cv2,我有一系列正在分析的视频。我们有50个视频,目前每个视频采样10帧。我们通过一个模型运行每个帧,该模型输出长度为7的列表(各种度量的分数)。所以我们有一个X的形状[numVideos X[numFrames X[7]]。此输出与视频中的输出顺序相同 理想情况下,我们将使用这些数据训练一个模型,新模型将输出一个整数分数 例如,总输入列表是shape(50、10、7)。以下是50个视频分析中的一个示例: [[2.10857585e-01 3.44210785e-05 7.68336877e-02 6

我有一系列正在分析的视频。我们有50个视频,目前每个视频采样10帧。我们通过一个模型运行每个帧,该模型输出长度为7的列表(各种度量的分数)。所以我们有一个X的形状[numVideos X[numFrames X[7]]。此输出与视频中的输出顺序相同

理想情况下,我们将使用这些数据训练一个模型,新模型将输出一个整数分数

例如,总输入列表是shape(50、10、7)。以下是50个视频分析中的一个示例:

[[2.10857585e-01 3.44210785e-05 7.68336877e-02 6.52071908e-02
   1.59574211e-01 6.07666420e-03 4.81416196e-01]

[1.25921518e-01 3.82323651e-06 9.80229899e-02 1.59665961e-02
   5.27808852e-02 7.20748529e-02 6.35229409e-01]

[1.96348786e-01 1.39075582e-05 3.05381954e-01 8.71435739e-03
   7.70738944e-02 3.36979516e-02 3.78769159e-01]

[4.88201588e-01 4.07423446e-04 1.31438121e-01 2.09173430e-02
   5.96358590e-02 2.17649899e-02 2.77634591e-01]

[2.23202184e-01 9.74372160e-05 1.74910247e-01 2.34939177e-02
   3.35233539e-01 6.30585337e-03 2.36756831e-01]

[6.06459320e-01 2.96085584e-03 1.29230097e-01 2.59685959e-03
   1.56335548e-01 6.93407189e-03 9.54832658e-02]

[2.97920138e-01 1.25984091e-03 1.89080209e-01 5.00026112e-03
   8.90274197e-02 6.42844364e-02 3.53427678e-01]

[3.03987801e-01 6.44640977e-06 1.16339259e-01 2.88505014e-03
   1.53694913e-01 6.00992441e-02 3.62987250e-01]

[1.29550800e-01 1.86390607e-04 9.91750583e-02 2.72049874e-01
   8.33113417e-02 2.60952320e-02 3.89631271e-01]

[1.64423732e-03 2.68871787e-07 3.26379202e-04 9.86126721e-01
   5.81838889e-04 1.44834805e-03 9.87217203e-03] ]

我对这一部分有点麻烦,因为我对KRAS是新的。Aka使用[numFrames x[7]]在单个视频上输出预测?我认为我们可以使用任何顺序的帧数据制作一个合适的模型,但我相信帧的顺序(以及帧之间的变化和变化率)是有价值的。

最基本的方法是使用循环层。它们用于按顺序使用时间步并从中学习

因此,如果您使您的
X
具有形状
(50,10,7)
,如
(视频、帧、特征)
,您可以创建如下模型:

inputTensor = Input((10,7)) #also possible with (None,7) for variable frame counts   

#some recurrent layers with return_sequences=True
output = LSTM(someUnits, return_sequences=True)(inputTensor)
output = LSTM(aFewUnits, return_sequences=True)(output)
现在,如果您想要每个帧的分数,请保持
return\u sequences=True
并:

output = Dense(1, activation=someActivation)(output)
model = Model(inputTensor, output) #output shape = (50,10,1)
或者,如果您想要每个视频的总分,最后一个重复出现的层应该有
return\u sequences=False

output = LSTM(aFewUnits, return_sequences=False)(output)
output = Dense(1, activation=someActivation)(output)
model = Model(inputTensor, output)   #output shape = (50,1)  

现在,如果你的帧是真实的图像,你想处理这些图像,它会变得有点复杂。你应该考虑像素的存在和数据的形状。

假设您有8 x 8像素的帧,在RGB中,您的视频输入形状应该类似于
(50,10,8,8,3)

一种方法是首先将图像重塑为特征:
X.重塑((50,10,-1))

然后连接7个特性:
X=np。连接([X,特性],轴=-1)

然后使用这个模型


另一种方法是使用该层,该层采用与原始视频形状相同的输入。在模型中的某个点,将空间尺寸折叠为特征(与上面的重塑过程相同),并与第二个输入(即7个特征)连接

最基本的方法是使用循环层。它们用于按顺序使用时间步并从中学习

因此,如果您使您的
X
具有形状
(50,10,7)
,如
(视频、帧、特征)
,您可以创建如下模型:

inputTensor = Input((10,7)) #also possible with (None,7) for variable frame counts   

#some recurrent layers with return_sequences=True
output = LSTM(someUnits, return_sequences=True)(inputTensor)
output = LSTM(aFewUnits, return_sequences=True)(output)
现在,如果您想要每个帧的分数,请保持
return\u sequences=True
并:

output = Dense(1, activation=someActivation)(output)
model = Model(inputTensor, output) #output shape = (50,10,1)
或者,如果您想要每个视频的总分,最后一个重复出现的层应该有
return\u sequences=False

output = LSTM(aFewUnits, return_sequences=False)(output)
output = Dense(1, activation=someActivation)(output)
model = Model(inputTensor, output)   #output shape = (50,1)  

现在,如果你的帧是真实的图像,你想处理这些图像,它会变得有点复杂。你应该考虑像素的存在和数据的形状。

假设您有8 x 8像素的帧,在RGB中,您的视频输入形状应该类似于
(50,10,8,8,3)

一种方法是首先将图像重塑为特征:
X.重塑((50,10,-1))

然后连接7个特性:
X=np。连接([X,特性],轴=-1)

然后使用这个模型


另一种方法是使用该层,该层采用与原始视频形状相同的输入。在模型中的某个点,将空间尺寸折叠为特征(与上面的重塑过程相同),并与第二个输入(即7个特征)连接

嘿,丹尼尔-我知道已经有一段时间了,但我有个问题。如果将(无,7)用于可变帧数,所有50个视频是否都需要具有相同的可变帧数,或者它们是否都不同?例如,一个视频可能有100帧,下一个视频可能有150帧?它们可能不同,但不能将它们全部放在一个numpy阵列中。所以你需要单独训练每个视频。非常感谢!你真的帮了我大忙。我猜这也适用于model.fit()中的验证数据?当验证数据的形状尺寸不均匀时,是否有一种最佳实践方法来测量val_损失?这是一个难题。。。。我认为掩蔽是唯一的方法。。。但我不知道它到底是怎么工作的,也不知道它是否适用于损失函数。嘿,丹尼尔,我知道已经有一段时间了,但我有一个问题。如果将(无,7)用于可变帧数,所有50个视频是否都需要具有相同的可变帧数,或者它们是否都不同?例如,一个视频可能有100帧,下一个视频可能有150帧?它们可能不同,但不能将它们全部放在一个numpy阵列中。所以你需要单独训练每个视频。非常感谢!你真的帮了我大忙。我猜这也适用于model.fit()中的验证数据?当验证数据的形状尺寸不均匀时,是否有一种最佳实践方法来测量val_损失?这是一个难题。。。。我认为掩蔽是唯一的方法。。。但我不知道它是如何工作的,也不知道它是否适用于损失函数。