1#coding:utf-8 2''' 3正则化 4''' 5import mxnet as mx 6from mxnet import gluon 7from mxnet import ndarray 8from mxnet import autograd 9import numpy as np 10import matplotlib.pyplot as plt 11from mxnet import nd 12import random 13 14num_train = 20 15num_test = 100 16num_inputs = 200 17#模型真实参数 18true_w = nd.ones((num_inputs,1)) 19true_b = 0.05 20 21#生成测试和训练数据 22X = nd.random.normal(shape=(num_train+num_test,num_inputs)) 23y = nd.dot(X,true_w) + true_b 24y += 0.01 * nd.random.normal(shape=y.shape) 25 26X_train,X_test = X[:num_train,:],X[num_train:,:] 27y_train,y_test = y[:num_train],y[num_train:] 28 29batch_size = 1 30dataset_train = gluon.data.ArrayDataset(X_train, y_train) 31data_iter_train = gluon.data.DataLoader(dataset_train, batch_size,shuffle=True) 32 33# 定义损失函数 34square_loss = gluon.loss.L2Loss() 35 36# 定义测试函数 37def test(net,X,y): 38 return square_loss(net(X),y).mean().asscalar() 39 40# 定义训练函数 41def train(weight_decay): 42 epochs = 10 43 learning_rate = 0.005 44 net = gluon.nn.Sequential() 45 with net.name_scope(): 46 net.add(gluon.nn.Dense(1)) 47 48 net.collect_params().initialize() 49 trainer = gluon.Trainer(net.collect_params(),'sgd', 50 {'learning_rate':learning_rate,'wd':weight_decay}) 51 52 train_loss = [] 53 test_loss = [] 54 55 for e in range(epochs): 56 for data,label in data_iter_train: 57 with autograd.record(): 58 output = net(data) 59 loss = square_loss(output,label) 60 loss.backward() 61 trainer.step(batch_size) 62 63 train_loss.append(test(net,X_train,y_train)) 64 test_loss.append(test(net,X_test,y_test)) 65 66 67 plt.plot(train_loss) 68 plt.plot(test_loss) 69 plt.legend(['train','test']) 70 plt.show() 71 72# 未使用正则化 73# train(0) 74 75# 使用正则化 76train(5)
MXNet动手学深度学习笔记:Gluon实现正则化
Stella981
2021-10-11
1260 0 0
点赞
收藏
评论区
加载中...