from mxnet import ndarray as nd
from mxnet import autograd
from mxnet import gluon
# 1. 处理数据
num_inputs = 2
num_examples = 1000
true_w = [2, -3.4]
true_b = 4.2
x = nd.random_normal(shape=(num_examples, num_inputs))
y = true_w[0]*x[:, 0]+true_w[1]*x[:, 1]+true_b
y += .01*nd.random_normal(shape=y.shape)
batch_size = 10
dataset = gluon.data.ArrayDataset(x, y)
data_iter = gluon.data.DataLoader(dataset, batch_size, shuffle=true_b)
# 2. 建立模型
net = gluon.nn.Sequential()
# 添加一层全连接层
net.add(gluon.nn.Dense(1))
net.initialize()
print(net)
# 3. 损失函数和优化器
squeare_loss = gluon.loss.L2Loss()
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate': 0.1})
# 4. 循环训练
epoch = 100
for e in range(epoch):
total_loss = 0
for data, label in data_iter:
with autograd.record():
output = net(data)
loss = squeare_loss(output, label)
loss.backward()
trainer.step(batch_size)
total_loss += nd.sum(loss).asscalar()
print("Epoch %d, average loss: %f" % (e+1, total_loss/num_examples))