神经网络GoogleNet训练数据集CIFAR10

GoogleNet神经网路结构

一个 inception 模块的四个并行线路如下: 1.一个 1 x 1 的卷积,一个小的感受野进行卷积提取特征 2.一个 1 x 1 的卷积加上一个 3 x 3 的卷积,1 x 1 的卷积降低输入的特征通道,减少参数计算量,然后接一个 3 x 3 的卷积做一个较大感受野的卷积 3.一个 1 x 1 的卷积加上一个 5 x 5 的卷积,作用和第二个一样 4.一个 3 x 3 的最大池化加上 1 x 1 的卷积,最大池化改变输入的特征排列,1 x 1 的卷积进行特征提取,最后将四个并行线路得到的特征在通道这个维度上拼接在一起。

InceptionNet(GoogleNet)就是由Inception模块堆叠而成的。InceptionNet将输入大小相同的部分归到一个block(不同于vgg_block)中,使整个网络看起来更具层次感。

 

以上是Inception1的结构,Inception2将Inception1中的5*5的卷积层替换为两个3*3的卷积层,Inception3中的3*3的卷积层替换为两个3*1的卷积层,以下是Inception2和Inception3的结构图。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoogLeNet是一个深度卷积神经网络,它在2014年ImageNet大规模视觉识别竞赛(ILSVRC)上获得了冠军。以下是一个使用GoogLeNet进行CIFAR-10分类任务的示例代码。 首先,我们需要导入必要的库:TensorFlow和Keras。 ```python import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers ``` 然后,我们可以定义GoogLeNet网络。GoogLeNet由多个“Inception”模块组成,每个模块都有多个分支,包含不同大小的卷积和池化操作。下面是一个包含3个Inception模块的简单实现。 ```python def create_googlenet(): input_shape = (32, 32, 3) # Input layer inputs = keras.Input(shape=input_shape) # First convolutional layer x = layers.Conv2D(filters=64, kernel_size=7, strides=2, padding="same", activation="relu")(inputs) x = layers.MaxPooling2D(pool_size=3, strides=2, padding="same")(x) # First Inception module x = inception_module(x, filters=[64, 96, 128, 16, 32, 32]) # Second Inception module x = inception_module(x, filters=[128, 128, 192, 32, 96, 64]) x = layers.MaxPooling2D(pool_size=3, strides=2, padding="same")(x) # Third Inception module x = inception_module(x, filters=[192, 96, 208, 16, 48, 64]) # Output layer x = layers.GlobalAveragePooling2D()(x) outputs = layers.Dense(units=10, activation="softmax")(x) # Create model model = keras.Model(inputs=inputs, outputs=outputs, name="googlenet") return model ``` Inception模块可以使用以下代码实现: ```python def inception_module(inputs, filters): f1, f3r, f3, f5r, f5, fp = filters # 1x1 convolution branch conv1 = layers.Conv2D(filters=f1, kernel_size=1, activation="relu")(inputs) # 3x3 convolution branch conv3r = layers.Conv2D(filters=f3r, kernel_size=1, activation="relu")(inputs) conv3 = layers.Conv2D(filters=f3, kernel_size=3, padding="same", activation="relu")(conv3r) # 5x5 convolution branch conv5r = layers.Conv2D(filters=f5r, kernel_size=1, activation="relu")(inputs) conv5 = layers.Conv2D(filters=f5, kernel_size=5, padding="same", activation="relu")(conv5r) # Max pooling branch pool = layers.MaxPooling2D(pool_size=3, strides=1, padding="same")(inputs) pool_conv = layers.Conv2D(filters=fp, kernel_size=1, activation="relu")(pool) # Concatenate branches outputs = layers.Concatenate()([conv1, conv3, conv5, pool_conv]) return outputs ``` 最后,我们可以编译和训练模型。 ```python # Load CIFAR-10 dataset (x_train, y_train), (x_test, y_test) = keras.datasets.cifar10.load_data() # Normalize pixel values x_train = x_train.astype("float32") / 255.0 x_test = x_test.astype("float32") / 255.0 # Convert labels to one-hot vectors y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) # Create model model = create_googlenet() # Compile model model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"]) # Train model model.fit(x_train, y_train, batch_size=128, epochs=50, validation_data=(x_test, y_test)) ``` 在训练完成后,我们可以使用以下代码评估模型的性能。 ```python # Evaluate model test_loss, test_acc = model.evaluate(x_test, y_test) print("Test accuracy:", test_acc) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值