importtensorflowastffromtensorflow.kerasimportdatasets,layers,modelsimportmatplotlib.pyplotasplt2023-11-0723:07:35.116262:Eexternal/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261]UnabletoregistercuDNNfactory:AttemptingtoregisterfactoryforplugincuDNNwhenonehasalreadybeenregistered2023-11-0723:07:35.116317:Eexternal/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607]UnabletoregistercuFFTfactory:AttemptingtoregisterfactoryforplugincuFFTwhenonehasalreadybeenregistered2023-11-0723:07:35.118021:Eexternal/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515]UnabletoregistercuBLASfactory:AttemptingtoregisterfactoryforplugincuBLASwhenonehasalreadybeenregistered下载并准备CIFAR10数据集CIFAR10数据集包含10类,共60000张彩色图片,每类图片有6000张。此数据集中50000个样例被作为训练集,剩余10000个样例作为测试集。类之间相互独立,不存在重叠的部分。
CNN将形状为(image_height,image_width,color_channels)的张量作为输入,忽略批次大小。如果您不熟悉这些维度,color_channels是指(R,G,B)。在此示例中,您将配置CNN以处理形状为(32,32,3)的输入,即CIFAR图像的格式。您可以通过将参数input_shape传递给第一层来实现此目的。
model=models.Sequential()model.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(32,32,3)))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation='relu'))model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation='relu'))到目前为止,模型的架构如下:
为了完成模型,您需要将卷积基(形状为(4,4,64))的最后一个输出张量馈送到一个或多个Dense层以执行分类。Dense层将向量作为输入(即1维),而当前输出为3维张量。首先,将3维输出展平(或展开)为1维,然后在顶部添加一个或多个Dense层。CIFAR有10个输出类,因此使用具有10个输出的最终Dense层。
model.add(layers.Flatten())model.add(layers.Dense(64,activation='relu'))model.add(layers.Dense(10))下面是模型的完整架构:
model.summary()Model:"sequential"_________________________________________________________________Layer(type)OutputShapeParam#=================================================================conv2d(Conv2D)(None,30,30,32)896max_pooling2d(MaxPooling2(None,15,15,32)0D)conv2d_1(Conv2D)(None,13,13,64)18496max_pooling2d_1(MaxPoolin(None,6,6,64)0g2D)conv2d_2(Conv2D)(None,4,4,64)36928flatten(Flatten)(None,1024)0dense(Dense)(None,64)65600dense_1(Dense)(None,10)650=================================================================Totalparams:122570(478.79KB)Trainableparams:122570(478.79KB)Non-trainableparams:0(0.00Byte)_________________________________________________________________网络摘要显示(4,4,64)输出在经过两个Dense层之前被展平为形状为(1024)的向量。