《动手学深度学习》 Linear

it2022-05-05  144

Linear Regression

用mxnet写了最简单的线性回归

代码

from mxnet import autograd, nd from mxnet.gluon import data as gdata from mxnet.gluon import nn from mxnet import init from mxnet.gluon import loss as gloss from mxnet import gluon num_inputs = 2 num_examples = 1000 true_w = [2.1, -5] true_b = 3.4 samples = nd.random.normal(scale=1, shape=(num_examples, num_inputs)) labels = true_w[0] * samples[:, 0] + true_w[1] * samples[:, 1] + true_b labels += nd.random.normal(scale=0.01, shape=labels.shape) batch_size = 10 dataset = gdata.ArrayDataset(samples, labels) data_iter = gdata.DataLoader(dataset, batch_size, shuffle=True) net = nn.Sequential() net.add(nn.Dense(1)) net.initialize((init.Normal(sigma=0.01))) loss = gloss.L2Loss() trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.03}) num_epochs = 5 for epoch in range(1, num_epochs + 1): for X, y in data_iter: with autograd.record(): l = loss(net(X), y) l.backward() trainer.step(batch_size) l = loss(net(samples), labels) print('epoch {}, loss: {}'.format(epoch, l.mean().asnumpy())) dense = net[0] print('真实权重:{},训练权重:{}'.format(true_w, dense.weight.data())) print('真是偏差:{},训练偏差:{}'.format(true_b, dense.bias.data()))

结果

epoch 1, loss: [0.04274421] epoch 2, loss: [0.00014196] epoch 3, loss: [4.8662067e-05] epoch 4, loss: [4.8426606e-05] epoch 5, loss: [4.8332287e-05] 真实权重:[2.1, -5],训练权重: [[ 2.099422 -5.0002365]] <NDArray 1x2 @cpu(0)> 真是偏差:3.4,训练偏差: [3.4005916] <NDArray 1 @cpu(0)>


最新回复(0)