深度學(xué)習(xí)技術(shù)基礎(chǔ)與實(shí)踐 課件 第4章-MindSpore實(shí)踐_第1頁(yè)
深度學(xué)習(xí)技術(shù)基礎(chǔ)與實(shí)踐 課件 第4章-MindSpore實(shí)踐_第2頁(yè)
深度學(xué)習(xí)技術(shù)基礎(chǔ)與實(shí)踐 課件 第4章-MindSpore實(shí)踐_第3頁(yè)
深度學(xué)習(xí)技術(shù)基礎(chǔ)與實(shí)踐 課件 第4章-MindSpore實(shí)踐_第4頁(yè)
深度學(xué)習(xí)技術(shù)基礎(chǔ)與實(shí)踐 課件 第4章-MindSpore實(shí)踐_第5頁(yè)
已閱讀5頁(yè),還剩71頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章MindSpore實(shí)踐授課教師:時(shí)

間:01概述1.1概述神經(jīng)網(wǎng)絡(luò)概述網(wǎng)絡(luò)通過數(shù)據(jù)“學(xué)習(xí)”網(wǎng)絡(luò)對(duì)新數(shù)據(jù)進(jìn)行“預(yù)測(cè)”網(wǎng)絡(luò)訓(xùn)練網(wǎng)絡(luò)推理經(jīng)過訓(xùn)練(Training)的神經(jīng)網(wǎng)絡(luò)可以將其所學(xué)到的知識(shí)應(yīng)用于現(xiàn)實(shí)世界的任務(wù)——圖像識(shí)別、圖像分割、語言翻譯等各種各樣的應(yīng)用。神經(jīng)網(wǎng)絡(luò)基于其所訓(xùn)練的內(nèi)容對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)推導(dǎo)的過程就是推理。神經(jīng)網(wǎng)絡(luò)概述02數(shù)據(jù)2.12.2數(shù)據(jù)集張量張量矩陣(2D張量)標(biāo)量(0維張量)向量(1D張量)更高維張量?jī)H包含一個(gè)數(shù)字的張量。在Numpy中,一個(gè)float32或float64的數(shù)字就是一個(gè)標(biāo)量張量。數(shù)字組成的數(shù)組。一維張量只有一個(gè)軸。向量組成的數(shù)組。矩陣有2個(gè)軸,通常叫做行和列。可以將矩陣直觀地理解為數(shù)字組成的矩形網(wǎng)絡(luò)。將多個(gè)矩陣合成一個(gè)新的數(shù)組,可以得到一個(gè)3D張量。以此類推可以得到更高維的張量直觀理解張量Mindspore張量張量定義張量運(yùn)算MindSpore中張量(Tensor)是一種簡(jiǎn)潔而強(qiáng)大的數(shù)據(jù)結(jié)構(gòu)算數(shù)運(yùn)算線性代數(shù)矩陣處理(裝置,標(biāo)引,切片)采樣Input_data參數(shù):TensorIntNumpy.arraydtype參數(shù):32mindspre.float64Mindspore張量實(shí)現(xiàn)importnumpyasnpfrommindsporeimportTensorfrommindsporeimportdtypeasmstypefrommindspore.opsimportoperationsasops//創(chuàng)建Tensordefinit_Tensor():a=Tensor(input_data=np.array([[1,2],[3,4]]),dtype=mstype.int32)b=Tensor(1.0,mstype.int32)c=Tensor(2)d=Tensor(True,mstype.bool_)e=Tensor((1,2,3),mstype.int16)f=Tensor(Tensor(1.0),mstype.float64)print(a,’\t’,b,’\t’,c,’\n’,d,’\t’,e,’\t’,f)Mindspore張量實(shí)現(xiàn)defcompute_Tensor():data1=Tensor(np.array([[0,1],[2,3]]).astype(np.float32))data2=Tensor(np.array([[4,5],[6,7]]).astype(np.float32))mul=ops.Mul()output_mul=mul(data1,data2)#對(duì)于合并和連接操作,輸入數(shù)據(jù)需要以列表或元組的形式執(zhí)行操作con=ops.Concat()output_con=con((data1,data2))sta=ops.Stack()output_sta=sta([data1,data2])print(’Mul操作\t\tConcat操作\t\tStack操作\n’,output_mul,’\t\t’,output_con,’\t\t’,output_sta)Mindspore張量實(shí)現(xiàn)if__name__==’__main__’:print(”初始化Tensor”)init_Tensor()print(”Tensor之間的運(yùn)算”)compute_Tensor()Mindspore張量實(shí)現(xiàn)初始化Tensor[[1,2]12[3,4]]True[1,2,3]1.0Tensor之間的運(yùn)算Mul操作Concat操作Stack操作[[0.,5.][[0.1.][[[0.1.][12.,21.]][2.3.][2.3.]][4.5.][[4.5.][6.7.]][6.7.]]]Mindspore數(shù)據(jù)集標(biāo)準(zhǔn)數(shù)據(jù)集數(shù)據(jù)預(yù)處理數(shù)據(jù)集加載數(shù)據(jù)集創(chuàng)建mindspore.dataset訪問標(biāo)準(zhǔn)數(shù)據(jù)集

mindspore提供了打亂數(shù)據(jù),分批等預(yù)處理接口create_dict_iterator接口用于數(shù)據(jù)加載通過實(shí)現(xiàn)__getitem__與__len__函數(shù)實(shí)現(xiàn)自定義數(shù)據(jù)用戶自定義數(shù)據(jù)集importmindspore.datasetasdsimportnumpyasnpnp.random.seed(58)classDatasetGenerator:’’’用戶自定義數(shù)據(jù)集類需實(shí)現(xiàn)__getitem__函數(shù)與__len__函數(shù)__len__:使迭代器能夠獲得數(shù)據(jù)總量__getitem__:能夠根據(jù)給定的索引值index,獲取數(shù)據(jù)集中的數(shù)據(jù)并返回?!痙ef__init__(self):self.data=np.random.sample((5,2))self.label=np.random.sample((5,1))def__getitem__(self,index):returnself.data[index],self.label[index]def__len__(self):returnlen(self.data)用戶自定義數(shù)據(jù)集defbuildDS_from_Customer():dataset_generator=DatasetGenerator()dataset=ds.GeneratorDataset(dataset_generator,[”data”,”label”],shuffle=False)returndatasetMindspore標(biāo)準(zhǔn)數(shù)據(jù)集defbuildDS_from_MindSpore():#需提前下載cifar10數(shù)據(jù)集DATA_DIR=”/your/path/to/cifar10/train”sampler=ds.SequentialSampler(num_samples=5)dataset=ds.Cifar10Dataset(DATA_DIR,sampler=sampler)returndataset數(shù)據(jù)集預(yù)處理defpreprocessing(dataset):ds.config.set_seed(58)#隨機(jī)打亂數(shù)據(jù)順序dataset=dataset.shuffle(buffer_size=10)#對(duì)數(shù)據(jù)集進(jìn)行分批dataset=dataset.batch(batch_size=2)returndataset測(cè)試代碼if__name__==’__main__’:print(”常見數(shù)據(jù)集”)dataset1=buildDS_from_MindSpore()fordataindataset1.create_dict_iterator():print(”Imageshape:{}”.format(data[’image’].shape),”,Label:{}”.format(data[’label’]))print(”自定義數(shù)據(jù)集”)dataset2=buildDS_from_Customer()fordataindataset2.create_dict_iterator():print(’{}’.format(data[”data”]),’{}’.format(data[”label”]))print(”打亂數(shù)據(jù)集”)dataset2=preprocessing(dataset2)fordataindataset2.create_dict_iterator():print(”data:{}”.format(data[”data”]))print(”label:{}”.format(data[”label”]))運(yùn)行結(jié)果常見數(shù)據(jù)集Imageshape:(32,32,3),Label:6Imageshape:(32,32,3),Label:9Imageshape:(32,32,3),Label:9Imageshape:(32,32,3),Label:4Imageshape:(32,32,3),Label:1自定義數(shù)據(jù)集[0.365105580.45120592][0.78888122][0.496060350.07562207][0.38068183][0.571761580.28963401][0.16271622][0.308804460.37487617][0.54738768][0.815856670.96883469][0.77994068]運(yùn)行結(jié)果打亂數(shù)據(jù)集data:[[0.365105580.45120592][0.571761580.28963401]]label:[[0.78888122][0.16271622]]data:[[0.308804460.37487617][0.496060350.07562207]]label:[[0.54738768][0.38068183]]data:[[0.815856670.96883469]]label:[[0.77994068]]03模型模塊3.13.23.3激活函數(shù)池化層卷積層3.4全連接層3.5Flatten層3.6自定義層模型模塊MindsporeCell類卷積層激活函數(shù)池化層Flatten層卷積層卷積層(Conv)通過定義卷積核,對(duì)數(shù)據(jù)進(jìn)行卷積運(yùn)算從而提取特征不同的卷積核參數(shù)能夠提取出不同的數(shù)據(jù)特征并濾除其他無關(guān)特征卷積層nn.conv2d,nn.conv3D創(chuàng)建2D,3D卷積函數(shù)in_channels:輸入通道數(shù)目out_channels:輸出通道數(shù)stride:步長(zhǎng)pad_mode:填充模式卷積層卷積核的數(shù)量決定了特征圖的數(shù)量步長(zhǎng)決定了卷積核每次移動(dòng)的距離卷積步長(zhǎng)與卷積核大小、填充模式共同決定了輸出圖像的尺寸大小激活函數(shù)01020304人工神經(jīng)網(wǎng)絡(luò)神經(jīng)元上的函數(shù)解決非線性問題理論上可以逼近任意函數(shù)用于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)復(fù)雜函數(shù)sigmoid函數(shù)將實(shí)數(shù)映射到(0,1)平滑,易求導(dǎo)運(yùn)算量大不服從0均值分布網(wǎng)絡(luò)深會(huì)出現(xiàn)梯度消失的問題Tanh函數(shù)以0為中心收斂快運(yùn)算量大網(wǎng)絡(luò)深會(huì)出現(xiàn)梯度消失的問題ReLU函數(shù)稀疏激活性更強(qiáng)的表達(dá)能力會(huì)出現(xiàn)靜默神經(jīng)元LeakyReLU函數(shù)負(fù)半?yún)^(qū)間引入泄露值未激活神經(jīng)元仍然有很小的梯度減少靜默神經(jīng)元產(chǎn)生概率尚未證明比ReLU更好MS中構(gòu)建激活函數(shù)importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefActivation():sigmoid=nn.Sigmoid()tanh=nn.Tanh()relu=nn.ReLU()leakyrelu=nn.LeakyReLU(0.2)input_x=Tensor(np.array([?1,2,?3,2,?1]),mindspore.float32)output_s=sigmoid(input_x)output_t=tanh(input_x)測(cè)試激活函數(shù)if__name__==’__main__’:print(”常見的激活函數(shù)”)Activation()常見的激活函數(shù)sigmoid[0,268941430,8807970,047425870,8807970,26894143]tanh[?0,76159420.9640276?0.99505480.9640276?0.7615942]relu[0.2.0.2.0.]leakyrelu[?0.22.?0.62.?0.2]池化層池化層(Pooling)也叫下采樣層,通常應(yīng)用于卷積層之后,用于壓縮數(shù)據(jù)特征池化層不僅可以提高計(jì)算速度,還減小了過擬合常見的池化函數(shù)為最大池化(maxpool)與平均池化(avgpool)。MS中構(gòu)建池化層importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefPooling():max_pool2d=nn.MaxPool2d(kernel_size=2,stride=2)avg_pool2d=nn.AvgPool2d(kernel_size=2,stride=2)input_x=Tensor(np.array([[[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]]]),mindspore.float32)MS中構(gòu)建池化層avg_pool2d=nn.AvgPool2d(kernel_size=2,stride=2)input_x=Tensor(np.array([[[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]]]),mindspore.float32)#對(duì)于2D池化,輸入Tensor的維度需為4#形如[B,C,W,H]#B:批數(shù)batchsize#C:通道數(shù)channels#W:寬度width#H:高度heightoutput_max=max_pool2d(input_x)output_avg=avg_pool2d(input_x)print(”max_pool2d\n”,output_max,”\navg_pool2d\n”,output_avg)測(cè)試池化層if__name__==’__main__’:print(”常見的池化層”)Pooling()max_pool2d[[[[2.4.][2.4.]]]]avg_pool2d[[[[1.53.5][1.53.5]]]]全連接層全連接層(Dense)通過對(duì)輸入矩陣進(jìn)行線性變換從而改變Tensor的維度。通常與Flatten層配合使用MS中構(gòu)建測(cè)試全連接層importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefDense():dense=nn.Dense(400,120,weight_init=’normal’)input_x=Tensor(np.ones([1,400]),mindspore.float32)output=dense(input_x)returnoutput.Shapeif__name__==’__main__’: print(”Dense層”,Dense())Dense層(1,120)全連接層Flatten層用來將輸入“壓平”,即把多維的輸入一維化,常用于卷積層到全連接層的過渡。例如維度為[W,H,C]的Tensor經(jīng)過Flatten層處理后,會(huì)轉(zhuǎn)換為長(zhǎng)度為W*H*C的一維Tensor。MS中構(gòu)建測(cè)試Flatten層importnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensordefFlatten():flatten=nn.Flatten()input_x=Tensor(np.ones([1,16,5,5]),mindspore.float32)output=flatten(input_x)returnoutput.Shapeif__name__==’__main__’:print(”flatten層”,Flatten())flatten層(1,400)自定義網(wǎng)絡(luò)自定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)時(shí),網(wǎng)絡(luò)類需要繼承Cell類,并重寫__init__方法和construct方法。其中__init__函數(shù)用于實(shí)現(xiàn)父類初始化,而construct函數(shù)用于定義網(wǎng)絡(luò)的前向傳播方式。實(shí)例化網(wǎng)絡(luò)后,網(wǎng)絡(luò)各層參數(shù)會(huì)自動(dòng)初始化,這些權(quán)重和偏置參數(shù)會(huì)在之后的訓(xùn)練中逐漸優(yōu)化??梢酝ㄟ^使用parameters_and_names()方法訪問所有參數(shù)。MS中自定義LeNet#mynetwork.pyimportnumpyasnpimportmindsporeimportmindspore.nnasnnfrommindsporeimportTensorclassLeNet5(nn.Cell):def__init__(self,num_class=10,num_channel=1):super(LeNet5,self).__init__()#定義所需要的運(yùn)算self.conv1=nn.Conv2d(num_channel,6,5,pad_mode=’valid’)self.conv2=nn.Conv2d(6,16,5,pad_mode=’valid’)self.fc1=nn.Dense(16?5?5,120)self.fc2=nn.Dense(120,84)self.fc3=nn.Dense(84,num_class)self.relu=nn.ReLU()self.max_pool2d=nn.MaxPool2d(kernel_size=2,stride=2)self.flatten=nn.Flatten()MS中自定義LeNetdefconstruct(self,x):#使用定義好的運(yùn)算構(gòu)建前向網(wǎng)絡(luò)x=self.conv1(x)x=self.relu(x)x=self.max_pool2d(x)x=self.conv2(x)x=self.relu(x)x=self.max_pool2d(x)x=self.flatten(x)x=self.fc1(x)x=self.relu(x)x=self.fc2(x)x=self.relu(x)x=self.fc3(x)returnx打印模型參數(shù)if__name__==’__main__’:model=LeNet5()print(”打印模型參數(shù)”)forminmodel.parameters_and_names():print(m)打印模型參數(shù)打印模型參數(shù)(’conv1.weight’,Parameter(name=conv1.weight,shape=(6,1,5,5),dtype=Float32,requires_grad=True))(’conv2.weight’,Parameter(name=conv2.weight,shape=(16,6,5,5),dtype=Float32,requires_grad=True))(’fc1.weight’,Parameter(name=fc1.weight,shape=(120,400),dtype=Float32,requires_grad=True))(’fc1.bias’,Parameter(name=fc1.bias,shape=(120,),dtype=Float32,requires_grad=True))(’fc2.weight’,Parameter(name=fc2.weight,shape=(84,120),dtype=Float32,requires_grad=True))(’fc2.bias’,Parameter(name=fc2.bias,shape=(84,),dtype=Float32,requires_grad=True))(’fc3.weight’,Parameter(name=fc3.weight,shape=(10,84),dtype=Float32,requires_grad=True))(’fc3.bias’,Parameter(name=fc3.bias,shape=(10,),dtype=Float32,requires_grad=True))04數(shù)據(jù)歸一化4.1數(shù)據(jù)歸一化數(shù)據(jù)歸一化重要性01隱藏層參數(shù)更新會(huì)導(dǎo)致輸出層分布改變0203隨著層數(shù)的增加分布偏移會(huì)被放大需要較小的學(xué)習(xí)率來訓(xùn)練網(wǎng)絡(luò),初始化參數(shù)會(huì)影響訓(xùn)練效果批歸一化批歸一化(BatchNormalization,BN)是在minibatch維度上在每次訓(xùn)練iteration時(shí)對(duì)隱藏層進(jìn)行歸一化,通過參數(shù)在量級(jí)和尺度上做約束,緩和過擬合情況。批歸一化優(yōu)缺點(diǎn)提升訓(xùn)練速度增加分類效果效果依賴于batchsize小batch效果較差導(dǎo)致batch中樣本細(xì)節(jié)丟失批歸一化優(yōu)缺點(diǎn)05損失函數(shù)5.1損失函數(shù)損失函數(shù)定義通過網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行前向計(jì)算實(shí)現(xiàn)前向傳播使用損失函數(shù)評(píng)估模型當(dāng)前表現(xiàn),損失越小,效果越好將預(yù)測(cè)值和真實(shí)值的誤差方向傳播優(yōu)化參數(shù)經(jīng)驗(yàn)風(fēng)險(xiǎn)損失函數(shù)指預(yù)測(cè)結(jié)果和實(shí)際結(jié)果的差別結(jié)構(gòu)風(fēng)險(xiǎn)損失函數(shù)是指經(jīng)驗(yàn)風(fēng)險(xiǎn)損失函數(shù)加上正則項(xiàng)。MS中構(gòu)建損失函數(shù)importnumpyasnpimportmindspore.nnasnnfrommindsporeimportTensordefLOSS(output_data,target_data):L1loss=nn.L1Loss()MSELoss=nn.MSELoss()print(”L1loss”,L1loss(output_data,target_data))print(”MSELoss”,MSELoss(output_data,target_data))if__name__==’__main__’:output_data=Tensor(np.array([[1,2,3],[2,3,4]]).astype(np.float32))target_data=Tensor(np.array([[0,2,5],[3,1,1]]).astype(np.float32))LOSS(output_data,target_data)L1loss1.5MSELoss3.166666706優(yōu)化器6.1優(yōu)化器Mindspore優(yōu)化器frommindsporeimportnnfrommynetworkimportLeNet5optim=nn.SGD(params=LeNet5.trainable_params(),learning_rate=0.1)optim=nn.Adam(params=LeNet5.trainable_params(),learning_rate=0.1)得到模型預(yù)測(cè)誤差后,需要通過梯度下降將其反向傳播以優(yōu)化參數(shù)模型優(yōu)化算法的選擇直接關(guān)系到最終模型的性能07訓(xùn)練7.1訓(xùn)練訓(xùn)練得到模型預(yù)測(cè)誤差后,需要通過梯度下降將其反向傳播以優(yōu)化參數(shù)。MindSpore框架支持三種設(shè)備,分別為CPU,GPU與華為Ascend芯片MS中訓(xùn)練LeNetimportmindspore.datasetasdsimportmindspore.dataset.transforms.c_transformsasCimportmindspore.dataset.vision.c_transformsasCVfrommindsporeimportnn,Tensor,Modelfrommindsporeimportdtypeasmstypefrommindspore.train.callbackimportModelCheckpoint,CheckpointConfigfrommindsporeimportcontextfrommynetworkimportLeNet5#使用CPU訓(xùn)練,若想改用GPU訓(xùn)練只需修改device_target.MindSpore支持”Ascend”,”GPU”與”CPU”.context.set_context(mode=context.GRAPH_MODE,device_target=”CPU”)DATA_DIR=”your/path/tp/cifar10/train”net=LeNet5()#定義學(xué)習(xí)率等超參epochs=5batch_size=64learning_rate=1e?3MS中訓(xùn)練LeNet#構(gòu)建數(shù)據(jù)集sampler=ds.SequentialSampler(num_samples=128)dataset=ds.Cifar10Dataset(DATA_DIR,sampler=sampler)#數(shù)據(jù)類型轉(zhuǎn)換type_cast_op_image=C.TypeCast(mstype.float32)type_cast_op_label=C.TypeCast(mstype.int32)HWC2CHW=CV.HWC2CHW()dataset=dataset.map(operations=[type_cast_op_image,HWC2CHW],input_columns=”image”)dataset=dataset.map(operations=type_cast_op_label,input_columns=”label”)dataset=dataset.batch(batch_size)optim=nn.SGD(params=net.trainable_params(),learning_rate=learning_rate)loss=nn.SoftmaxCrossEntropyWithLogits(sparse=True,reduction=’mean’)#輸入訓(xùn)練輪次和數(shù)據(jù)集進(jìn)行訓(xùn)練model=Model(net,loss_fn=loss,optimizer=optim)model.train(epoch=epochs,train_dataset=dataset)08模型保存與加載1.2模型保存與加載模型保存與加載在模型訓(xùn)練的過程中,考慮到不可抗因素,需要及時(shí)存儲(chǔ)模型參數(shù)。得到Checkpoint文件實(shí)際是對(duì)應(yīng)模型的參數(shù)字典。加載模型權(quán)重時(shí),需要先創(chuàng)建相同模型的實(shí)例load_checkpoint方法會(huì)把參數(shù)文件中的網(wǎng)絡(luò)參數(shù)加載到字典param_dictload_param_into_net方法則會(huì)將讀取的字典進(jìn)行加載至網(wǎng)絡(luò)實(shí)例中。MS中保存模型#定義回調(diào)對(duì)象與回調(diào)策略用于保存函數(shù)參數(shù)config_ck=CheckpointConfig(save_checkpoint_steps=32,keep_checkpoint_max=10)ckpt_cb=ModelCheckpoint(prefix=’resnet50’,directory=None,config=config_ckpt)’’’save_checkpoint_steps:每隔多少個(gè)step保存一次。keep_checkpoint_max:最多保留CheckPoint文件的數(shù)量。prefix:生成CheckPoint文件的前綴名。directory:存放文件的目錄’’’#輸入訓(xùn)練輪次和數(shù)據(jù)集進(jìn)行訓(xùn)練model.train(epoch=epochs,train_dataset=dataset,callbacks=ckpt_cb)MS中加載模型frommindsporeimportload_checkpoint,load_param_into_netresnet=ResNet50()#將模型參數(shù)存入parameter的字典中param_dict=load_checkpoint(”/path/to/ckpt.ckpt”)#將參數(shù)加載到網(wǎng)絡(luò)中l(wèi)oad_param_into_net(resnet,param_dict)model=Model(resnet,loss,metrics={”accuracy”})09鳶尾花實(shí)驗(yàn)9.1鳶尾花實(shí)驗(yàn)鳶尾花數(shù)據(jù)集著名的統(tǒng)計(jì)學(xué)家和生物學(xué)家R.AFisher用其作為線性判別分析的一個(gè)例子收集了三類鳶尾花,即Setosa鳶尾花、Versicolour鳶尾花和Virginica鳶尾花數(shù)據(jù)集包括4個(gè)屬性,分別為花萼的長(zhǎng)、花萼的寬、花瓣的長(zhǎng)和花瓣的寬在加拿大加斯帕半島上,于同一天的同一個(gè)時(shí)間段,使用相同的測(cè)量?jī)x器,在相同的牧場(chǎng)上由同一個(gè)人測(cè)量出來的鳶尾花數(shù)據(jù)集使用配置文件cfg=edict({’data_size’:150,’train_size’:120,#訓(xùn)練集大小’test_size’:30,#測(cè)試集大小’feature_number’:4,#輸入特征數(shù)’num_class’:3,#分類類別’batch_size’:30,’data_dir’:’iris.data’,’save_checkpoint_steps’:5,#多少步保存一次模型’keep_checkpoint_max’:1,#最多保存多少個(gè)模型’out_dir_no_opt’:’./model_iris/no_opt’,#保存模型路徑,無優(yōu)化器模型’out_dir_sgd’:’./model_iris/sgd’,#保存模型路徑,SGD優(yōu)化器模型’out_dir_momentum’:’./model_iris/momentum’,#保存模型路徑,momentum模型’out_dir_adam’:’./model_iris/adam’,#保存模型路徑,adam優(yōu)化器模型’output_prefix’:”checkpoint_fashion_forward”#保存模型文件名})使用配置文件#將數(shù)據(jù)集分為訓(xùn)練集120條,測(cè)試集30條。train_idx=np.random.choice(cfg.data_size,cfg.train_size,replace=False)test_idx=np.array(list(set(range(cfg.data_size))?set(train_idx)))X_train,Y_train=X[train_idx],Y[train_idx]X_test,Y_test=X[test_idx],Y[test_idx]defgen_data(X_train,Y_train,epoch_size):XY_train=list(zip(X_train,Y_train))ds_train=dataset.GeneratorDataset(XY_train,[’x’,’y’])ds_train=ds_train.shuffle(buffer_size=cfg.train_size).batch(cfg.batch_size,drop_remainder=True)XY_test=list(zip(X_test,Y_test))ds_test=dataset.GeneratorDataset(XY_test,[’x’,’y’])ds_test=ds_test.shuffle(buffer_size=cfg.test_size).batch(cfg.test_size,drop_remainder=True)returnds_train,ds_test定義訓(xùn)練測(cè)試過程importcsvimportosimporttimeimportnumpyasnpfromeasydictimportEasyDictasedictfrommatplotlibimportpyplotaspltimportmindsporefrommindsporeimportnnfrommindsporeimportcontextfrommindsporeimportdatasetfrommindspore.train.callbackimportTimeMonitor,LossMonitorfrommindsporeimportTensorfrommindspore.train.callbackimportModelCheckpoint,CheckpointConfigfrommindspore.trainimportModelcontext.set_context(mode=context.GRAPH_MODE,device_target=”Ascend”)導(dǎo)入必需包后,選用經(jīng)典的交叉熵?fù)p失作為模型損失函數(shù),定義訓(xùn)練、測(cè)試以及預(yù)測(cè)過程。訓(xùn)練函數(shù)傳入模型實(shí)例,優(yōu)化器、數(shù)據(jù)集等參數(shù)。定義訓(xùn)練測(cè)試過程#訓(xùn)練deftrain(network,net_opt,ds_train,prefix,directory,print_times):net_loss=nn.SoftmaxCrossEntropyWithLogits(is_grad=False,sparse=True,reduction=”mean”)model=Model(network,loss_fn=net_loss,optimizer=net_opt,metrics={”acc”})loss_cb=LossMonitor(per_print_times=print_times)config_ck=CheckpointConfig(save_checkpoint_steps=cfg.save_checkpoint_steps,keep_checkpoint_max=cfg.keep_checkpoint_max)ckpoint_cb=ModelCheckpoint(prefix=prefix,directory=directory,config=config_ck)print(”==============StartingTraining==============”)model.train(epoch_size,ds_train,callbacks=[ckpoint_cb,loss_cb],dataset_sink_mode=False)returnmodel定義訓(xùn)練測(cè)試過程#評(píng)估預(yù)測(cè)defeval_predict(model,ds_test):#使用測(cè)試集評(píng)估模型,打印總體準(zhǔn)確率metric=model.eval(ds_test,dataset_sink_mode=False)print(metric)#預(yù)測(cè)test_=ds_test.create_dict_iterator().get_next()test=Tensor(test_[’x’],mindspore.float32)predictions=model.predict(test)predictions=predictions.asnumpy()foriinrange(10):p_np=predictions[i,:]p_list=p_np.tolist()print(’第’+str(i)+’個(gè)sample預(yù)測(cè)結(jié)果:’,p_list.index(max(p_list)),’真實(shí)結(jié)果:’,test_[’y’][i])無優(yōu)化器訓(xùn)練#??????????????????????????????????????????????????無優(yōu)化器???????????????????????????????????epoch_size=20print(’??????????????????無優(yōu)化器??????????????????????????’)#數(shù)據(jù)ds_train,ds_test=gen_data(X_train,Y_train,epoch_size)#定義網(wǎng)絡(luò)并訓(xùn)練network=nn.Dense(cfg.feature_number,cfg.num_class)model=train(network,None,ds_train,”checkpoint_no_opt”,cfg.out_dir_no_opt,4)#評(píng)估預(yù)測(cè)eval_predict(model,ds_test)使用SGD優(yōu)化器訓(xùn)練#???????????????????????????????????????????????????SGD???

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論