日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

deeplearning搜索空间

發布時間:2023/11/28 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 deeplearning搜索空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

deeplearning搜索空間
搜索空間是神經網絡搜索中的一個概念。搜索空間是一系列模型結構的匯集, SANAS主要是利用模擬退火的思想在搜索空間中搜索到一個比較小的模型結構或者一個精度比較高的模型結構。
paddleslim.nas 提供的搜索空間
根據初始模型結構構造搜索空間:

  1. MobileNetV2Space
    ? MobileNetV2的網絡結構
  2. MobileNetV1Space
    ? MobilNetV1的網絡結構
  3. ResNetSpace
    ? ResNetSpace的網絡結構
    根據相應模型的block構造搜索空間:
  4. MobileNetV1BlockSpace
    ? MobileNetV1Block的結構
  5. MobileNetV2BlockSpace
    ? MobileNetV2Block的結構
  6. ResNetBlockSpace
    ? ResNetBlock的結構
  7. InceptionABlockSpace
    ? InceptionABlock的結構
  8. InceptionCBlockSpace
    ? InceptionCBlock結構
    搜索空間使用示例
  9. 使用paddleslim中提供用初始的模型結構來構造搜索空間的話,僅需要指定搜索空間名字即可。例如:如果使用原本的MobileNetV2的搜索空間進行搜索的話,傳入SANAS中的configs直接指定為[(‘MobileNetV2Space’)]。
  10. 使用paddleslim中提供的block搜索空間構造搜索空間:
    2.1 使用input_size, output_size和block_num來構造搜索空間。例如:傳入SANAS的configs可以指定為[(‘MobileNetV2BlockSpace’, {‘input_size’: 224, ‘output_size’: 32, ‘block_num’: 10})]。
    2.2 使用block_mask構造搜索空間。例如:傳入SANAS的configs可以指定為[(‘MobileNetV2BlockSpace’, {‘block_mask’: [0, 1, 1, 1, 1, 0, 1, 0]})]。
    自定義搜索空間(search space)
    自定義搜索空間類需要繼承搜索空間基類并重寫以下幾部分:
    ? 1. 初始化的tokens(init_tokens函數),可以設置為自己想要的tokens列表, tokens列表中的每個數字指的是當前數字在相應的搜索列表中的索引。例如本示例中若tokens=[0, 3, 5],則代表當前模型結構搜索到的通道數為[8, 40, 128]。
    ? 2. tokens中每個數字的搜索列表長度(range_table函數),tokens中每個token的索引范圍。
    ? 3. 根據tokens產生模型結構(token2arch函數),根據搜索到的tokens列表產生模型結構。
    以新增reset block為例說明如何構造自己的search space。自定義的search space不能和已有的search space同名。

引入搜索空間基類函數和search space的注冊類函數

from .search_space_base import SearchSpaceBase
from .search_space_registry import SEARCHSPACE
import numpy as np

需要調用注冊函數把自定義搜索空間注冊到space space中

@SEARCHSPACE.register

定義一個繼承SearchSpaceBase基類的搜索空間的類函數

class ResNetBlockSpace2(SearchSpaceBase):
def init(self, input_size, output_size, block_num, block_mask):
### 定義一些實際想要搜索的內容,例如:通道數、每個卷積的重復次數、卷積核大小等等
### self.filter_num 代表通道數的搜索列表
self.filter_num = np.array([8, 16, 32, 40, 64, 128, 256, 512])

### 定義初始化token,初始化token的長度根據傳入的block_num或者block_mask的長度來得到的
def init_tokens(self):return [0] * 3 * len(self.block_mask)### 定義token的index的取值范圍
def range_table(self):return [len(self.filter_num)] * 3 * len(self.block_mask)### 把token轉換成模型結構
def token2arch(self, tokens=None):if tokens == None:tokens = self.init_tokens()self.bottleneck_params_list = []for i in range(len(self.block_mask)):self.bottleneck_params_list.append(self.filter_num[tokens[i * 3 + 0]],self.filter_num[tokens[i * 3 + 1]],self.filter_num[tokens[i * 3 + 2]],2 if self.block_mask[i] == 1 else 1)def net_arch(input):for i, layer_setting in enumerate(self.bottleneck_params_list):channel_num, stride = layer_setting[:-1], layer_setting[-1]input = self._resnet_block(input, channel_num, stride, name='resnet_layer{}'.format(i+1))return inputreturn net_arch### 構造具體block的操作
def _resnet_block(self, input, channel_num, stride, name=None):shortcut_conv = self._shortcut(input, channel_num[2], stride, name=name)input = self._conv_bn_layer(input=input, num_filters=channel_num[0], filter_size=1, act='relu', name=name + '_conv0')input = self._conv_bn_layer(input=input, num_filters=channel_num[1], filter_size=3, stride=stride, act='relu', name=name + '_conv1')input = self._conv_bn_layer(input=input, num_filters=channel_num[2], filter_size=1, name=name + '_conv2')return fluid.layers.elementwise_add(x=shortcut_conv, y=input, axis=0, name=name+'_elementwise_add')def _shortcut(self, input, channel_num, stride, name=None):channel_in = input.shape[1]if channel_in != channel_num or stride != 1:return self.conv_bn_layer(input, num_filters=channel_num, filter_size=1, stride=stride, name=name+'_shortcut')else:return inputdef _conv_bn_layer(self, input, num_filters, filter_size, stride=1, padding='SAME', act=None, name=None):conv = fluid.layers.conv2d(input, num_filters, filter_size, stride, name=name+'_conv')bn = fluid.layers.batch_norm(conv, act=act, name=name+'_bn')return bn

總結

以上是生活随笔為你收集整理的deeplearning搜索空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。