如何在 keras 中使用 cifar100 实现denseNet 架构?

如何在 Keras 中使用 cifar100 实现denseNet 架构?我看到 Keras 中的密集网络仅使用 imageNet 实现!如何使用 cifar100 实现

慕沐林林
浏览 156回答 1
1回答

慕森王

以下示例将帮助您了解如何cifar100使用DenseNet121. 请注意,我使用keraswith in tensorflow。import tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras.applications import DenseNet121from tensorflow.keras.preprocessing import imagefrom tensorflow.keras.models import Modelfrom tensorflow.keras.layers import Dense, GlobalAveragePooling2Dfrom tensorflow.keras import backend as K# import cifar 100 data# The data, split between train and test sets:(x_train, y_train), (x_test, y_test) = tf.keras.datasets.cifar100.load_data()print('x_train shape:', x_train.shape)print(x_train.shape[0], 'train samples')print(x_test.shape[0], 'test samples')x_train = x_train.astype('float32')x_test = x_test.astype('float32')x_train /= 255x_test /= 255# create the base pre-trained modelbase_model = DenseNet121(weights='imagenet', include_top=False)# add a global spatial average pooling layerx = base_model.outputx = GlobalAveragePooling2D()(x)# let's add a fully-connected layerx = Dense(1024, activation='relu')(x)# and a logistic layer -- let's say we have 200 classespredictions = Dense(100)(x)# this is the model we will trainmodel = Model(inputs=base_model.input, outputs=predictions)# first: train only the top layers (which were randomly initialized)# i.e. freeze all convolutional layersfor layer in base_model.layers:    layer.trainable = False# compile the model (should be done *after* setting layers to non-trainable)loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)model.compile(optimizer='rmsprop', loss=loss, metrics=['accuracy'])# train the model on the new data for a few epochsmodel.fit(x_train,y_train,epochs=5, validation_data=(x_test,y_test), verbose=1,batch_size=128)您也可以进行微调,因为我训练了将原始base_model权重保持在冻结状态的模型(未训练原始 base_model 的权重)。在微调期间,您可以解冻一些层并再次训练。我还建议您阅读有关ImageDataGenerator增强图像并在测试期间获得更好的准确性的信息。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python