我有一个基于 CNN 的模型架构,它获取 RGB 图像并将其分类为花/无花情况。现在我尝试将其更改为对象的 10 级颜色分类(白色、黑色、黄色等)。当前的架构对于原始任务已经实现了良好的准确性,但我认为对于颜色情况,它不需要这么复杂。所以尝试缩小它并使其更快。
你会如何改变它以使其更小更快?任何诸如减少层、过滤器、内核大小、函数等的东西
def create_model():
channels = 3
model = Sequential()
#change first one to 64
model.add(Conv2D(16, kernel_size = (3, 3), activation='relu', input_shape=(IMAGE_SIZE, IMAGE_SIZE, channels)))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(32, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(64, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(128, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Conv2D(32, kernel_size=(3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(BatchNormalization())
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(64, activation='relu'))
model.add(Dense(4, activation = 'softmax'))
return model
一种常见的方法是从简单的架构开始。当且仅当过度拟合得到控制时,您才可以开始添加其他卷积池层等。 我会从以下内容开始:
model = tf.keras.models.Sequential([
tf.keras.layers.Conv2D(32, (3, 3), activation="relu", input_shape=(IMAGE_SIZE, IMAGE_SIZE, CHANNELS)),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Conv2D(64, (3, 3), activation="relu"),
tf.keras.layers.MaxPooling2D(2, 2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dropout(0.5),
tf.keras.layers.Dense(128, activation="relu"),
tf.keras.layers.Dense(4, activation="softmax"),
])
mlflow
等工具来跟踪您的超参数值。
工具箱中的另一个工具是迁移学习。您可以利用预先训练的模型(例如
InceptionV3
中提供的 keras
),而不是从头开始构建架构,方法是冻结所有层(即不可训练层)并在其顶部添加一个您可以使用的密集层。真的会训练。