VGG16 结构 使用TensorFlows实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 def VGG16(input_shape=(224,224,3)): model = keras.Sequential([ keras.Input(shape=input_shape), layers.Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=64, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), #这里不same,则尺寸减半 layers.Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=128, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.Conv2D(filters=256, kernel_size=(3,3),padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.Conv2D(filters=512, kernel_size=(3,3), padding='same', activation='relu'), layers.MaxPool2D(pool_size=(2,2), strides=(2,2), padding='valid'), layers.Flatten(),#展平 layers.Dense(units=4096, activation='relu'), layers.Dense(units=4096, activation='relu'), layers.Dense(units=4096, activation='softmax') ]) model.compile( optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'] ) return model 在猫、狗二分类数据集上进行训练,测试,这里我们使用的是内置的预训练好的VGG16,进行微调即可
...