【发布时间】:2020-05-06 19:00:51
【问题描述】:
我正在调整 CNN 的架构以提高 CIFAR-10 数据集的性能。
虽然设置大多数超参数或多或少很简单,但为每一层选择过滤器的数量似乎很模糊。
什么是正确的框架/直觉来设置开始的过滤器数量和 CNN 中后续层的过滤器数量?
【问题讨论】:
标签: machine-learning deep-learning conv-neural-network
我正在调整 CNN 的架构以提高 CIFAR-10 数据集的性能。
虽然设置大多数超参数或多或少很简单,但为每一层选择过滤器的数量似乎很模糊。
什么是正确的框架/直觉来设置开始的过滤器数量和 CNN 中后续层的过滤器数量?
【问题讨论】:
标签: machine-learning deep-learning conv-neural-network
没有直接的方法可以知道要用于您的模型的过滤器数量。但是您可以测试一些值,例如 16,32,64,128,256...
有一个想法可以使这个过程自动化,我用它来为神经网络找到正确数量的卷积层和过滤器。
conv_layers = [3, 4, 5]
units = [32,64,128]
for conv_layer in conv_layers:
for unit in units:
Name = "CNN-LSTM-{}convl--{}LSTM-{}-time".format(conv_layer,unit,int(time.time()))
model = Sequential()
model.add(Input(shape=(IMG_HEIGHT, IMG_WIDTH, 3)))
model.add(Reshape(target_shape=(IMG_HEIGHT, IMG_WIDTH * 3)))
model.add(Conv1D(filters=64, kernel_size=3, padding="same", activation='relu',
input_shape=(IMG_HEIGHT, IMG_WIDTH * 3), data_format='channels_last'))
for i in range(conv_layer-1):
model.add(Conv1D(filters=64, kernel_size=3, padding="same", activation='relu'))
model.add(MaxPooling1D(pool_size=3))
model.add(Conv1D(filters=128, kernel_size=3, padding="same", activation='relu'))
model.add(Conv1D(filters=128, kernel_size=3, padding="same", activation='relu'))
model.add(LSTM(unit, activation='relu'))
model.add(BatchNormalization())
model.add(Flatten())
model.add(Dense(4, activation='softmax'))
model.build(input_shape=(batch_size, IMG_HEIGHT, IMG_WIDTH, 3))
model.summary()
训练后,您可以使用Tensorboard 可视化您的结果并选择最适合您的数据的架构。
这可能需要更多的训练时间,因此请考虑在训练过程中保存模型。
希望对你有帮助。
【讨论】: