NASNet

本论文的主要解决的问题

  1. 在Nas的论文中,我们针对的数据集是小数据集CIFAR-10,当数据集很大的时候我们需要的开销很大,于是针对大数据集,本论文提出了一种新的搜索空间,命名为‘NASNet’,它更具有灵活性。

本论文采用了什么方法解决的问题

  1. 重新设计了一种搜索空间,NASNet
  2. 将CIFAR-10数据集上表现最好的架构运用到大数据集ImageNet以及COCO数据集。

本论文的创新点

  1. 提出新的搜索空间
  2. 提出新的泛化技术 ScheduledDropPath
  3. 此论文中没有运用Policy Gradigent的策略,而是用PPO进行优化。

从图表中学习

在这里插入图片描述
架构是由两个重复的模块组成,一个是Normal Cell,另一个是Reduction Cell,这些Cell可以按照顺序堆叠,以处理任意控件维度和过滤深度的输入。其中:Normal Cell:不改变输入feature map的大小的卷积; Reduction Cell:将输入feature map的长宽各减少为原来的一半的卷积,是通过增加stride的大小来降低size。 其中Normal Cell的数量N可以是任意值。
在这里插入图片描述

一个卷积Cell中有B blocks,每个block有5个离散参数,因此控制器包含5B 用来预测卷积cell架构的softmax层。B=5 :
  Step1:从前面block中产生的hidden states中选择一个hidden state—hi-1;
  Step2:重复step的操作,选择一个hidden state—hi;
  Step3:为step1中选择的hidden state选择一个操作;
  Step4:为step2中选择的hidden state选择一个操作;
  Step5:选择一个方法去连接step3和step4中的输出从而产生一个new hidden state,并将其添加到hidden states中。
  在step3和step4中选择的操作如下:在这里插入图片描述
在step5中控制器RNN选择一种方法来组合两种hidden states(1)两个隐藏状态之间的元素级加法(2)沿filter维度连接两个隐藏状态,最后,对卷积单元中生成的所有未使用的隐藏状态进行深度连接,以提供最终的单元输出
在这里插入图片描述
从图片中我们可以看出这个是测试针对CIFAR-10数据集,NASNet与其他最新模型的比较。其中我们还比较了NASNet不同类型的性能,针对搜索空间的不同我们将它分为NASNet-A,NASNet-B,NASNet-C。6@768代表N的数量=6和卷积网络倒数第二层的filters的数量=768。
在这里插入图片描述
从上一个实验中我们发现表现比较好的是NASNet-A,所以在次实验中我们用NASNet-A架构,测试ImageNet大数据集
接着我们又测试了COCO数据集,以及若是有了计算资源的限制,NASNet是否还表现良好。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是可以在Jupyter上运行的使用NASnet模型训练CIFAR10数据集的代码示例。注意,由于NASnet模型较大,需要较长的时间进行训练,建议在GPU环境下运行。 首先,我们需要导入所需的库和模块: ``` python import tensorflow as tf from tensorflow.keras.datasets import cifar10 from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.utils import to_categorical from tensorflow.keras.applications.nasnet import NASNetMobile from tensorflow.keras.layers import Dense, GlobalAveragePooling2D from tensorflow.keras.models import Model ``` 接下来,我们需要加载CIFAR10数据集: ``` python (x_train, y_train), (x_test, y_test) = cifar10.load_data() ``` 然后,我们需要对数据进行预处理: ``` python # 将像素值归一化到0-1之间 x_train = x_train.astype('float32') / 255 x_test = x_test.astype('float32') / 255 # 将标签进行one-hot编码 y_train = to_categorical(y_train, num_classes=10) y_test = to_categorical(y_test, num_classes=10) ``` 接下来,我们需要定义NASnet模型: ``` python # 加载NASnet模型 base_model = NASNetMobile(weights='imagenet', include_top=False, input_shape=(32, 32, 3)) # 添加全局平均池化层和全连接层 x = base_model.output x = GlobalAveragePooling2D()(x) x = Dense(1024, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) # 构建完整模型 model = Model(inputs=base_model.input, outputs=predictions) ``` 接下来,我们需要编译模型并开始训练: ``` python # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 数据增强 datagen = ImageDataGenerator( rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True) # 开始训练 model.fit_generator(datagen.flow(x_train, y_train, batch_size=32), steps_per_epoch=len(x_train) / 32, epochs=10, validation_data=(x_test, y_test)) ``` 最后,我们可以使用测试集对模型进行评估: ``` python # 对测试集进行评估 score = model.evaluate(x_test, y_test, verbose=0) print("Test Loss: {:.3f}, Test Accuracy: {:.3f}".format(score[0], score[1])) ``` 希望这份代码能够帮助到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值