【发布时间】:2018-12-28 00:23:53
【问题描述】:
我正在KTH 数据集上训练一个 CNN 模型来检测 6 类人类行为。
数据处理
- 数据集由 599 个视频组成,每个动作有 25 个不同的人执行的 99-100 个视频。我将数据分为 300 个视频用于训练,98 个视频用于验证,200 个视频用于测试集。
- 我将分辨率降低到 50x50 像素,因此在处理时不会耗尽内存。
- 我从每个视频的中间提取了 200 帧。
- 它将像素从 0-255 标准化为 0,1。
- 最后我将一个热编码为类标签。
模型架构
This is my model architecture.
这是NN层的代码。
model = Sequential()
model.add(Conv3D(filters=64,
kernel_size=(3, 3, 3),
strides=(1, 1, 1),
padding='valid',
activation='relu',
input_shape=X_train.shape[1:]))
model.add(MaxPooling3D(pool_size=2,
strides=(2, 2, 2),
padding='same'))
model.add(Conv3D(filters=128,
kernel_size=(3, 3, 3),
strides=(1, 1, 1),
padding='valid',
activation='relu'))
model.add(MaxPooling3D(pool_size=2,
strides=(2, 2, 2),
padding='same'))
model.add(Conv3D(filters=256,
kernel_size=(3, 3, 3),
strides=(1, 1, 1),
padding='valid',
activation='relu'))
model.add(Conv3D(filters=256,
kernel_size=(3, 3, 3),
strides=(1, 1, 1),
padding='valid',
activation='relu'))
model.add(MaxPooling3D(pool_size=2,
strides=(2, 2, 2),
padding='same'))
model.add(Conv3D(filters=512,
kernel_size=(3, 3, 3),
strides=(1, 1, 1),
padding='valid',
activation='relu'))
model.add(Dense(4096, activation='relu'))
model.add(Dense(4096, activation='relu'))
#model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(6, activation='softmax'))
model.summary()
培训
我的问题是训练和验证的准确性都没有改变,它们基本上从第一个 epoch 就冻结了。这些是训练步骤。 这些是the first 6 epochs,这里是last 6 epochs。 损失看起来like this。 训练损失非常高,验证损失没有改变。 训练看起来like this。
我很困惑,模型是 underfitting 还是 overfitting? 我将如何解决这个问题? dropout 会有所帮助吗,因为我无法对视频进行数据增强(我假设是这样)?
我非常感谢任何建议。
【问题讨论】:
-
对于分类问题,您可以先使用 MNIST 数据集验证您的库和算法。
-
但这是一个视频数据集,它适用于 MNIST,但不适用于这种类型的数据集。
标签: python machine-learning keras deep-learning conv-neural-network