北京理工大学邱小尧,写本次帖子是基于机器学习实践课程完成的相关使用mindspore深度学习框架完成的任务,写一些分享心得,本次实验我们预采用mindspore进行
在这里我们使用准备好的txt文档进行数据读取,其中CRIM,ZN,INDUS,CHAS,NOX,RM,AGE,DIS,RAD,TAX,PTRATI,B,LSTAT,MEDV为其属性,
其中MEDV为我们需要预测的房价。
构建可按照如下方法构造DatasetGenerator并依此得到我们的dataset
- class DatasetGenerator:
- def __init__(self):
- self.data = data[:,:-1]
- self.label = data[:,-1]
-
- def __getitem__(self, index):
- return self.data[index], self.label[index]
-
- def __len__(self):
- return len(self.data)
-
- dataset_generator = DatasetGenerator()
- dataset = ds.GeneratorDataset(dataset_generator, ["data", "label"], shuffle=False)
-
- dataset = dataset.shuffle(buffer_size=15)
- dataset = dataset.batch(batch_size=16)
- train_dataset,test_dataset=dataset.split([0.8,0.2])
复制
接下来我们就开始构建全连接网络了仅采用三层全连接,较为简单。
- class net(nn.Cell):
- def __init__(self):
- super(net,self).__init__()
- self.fc1 = nn.Dense(13,10)
- self.relu = nn.ReLU()
- self.fc2 = nn.Dense(10,1)
-
- def construct(self, x):
- x = self.fc1(x)
- x = self.relu(x)
- x = self.fc2(x)
-
- return x
复制
在这里我们采用MSEloss函数,以及Adam优化器,感兴趣的话可以探究其他参数。
- net = net()
- loss = nn.MSELoss()
- learning_rate = 1e-3
- # optim = nn.Momentum(net.trainable_params(), learning_rate, 0.9)
- # optim = nn.SGD(net.trainable_params(),learning_rate=learning_rate,momentum=0.9)
- optim = nn.AdamWeightDecay(net.trainable_params(),learning_rate=learning_rate,weight_decay=1e-5)
- cb = LossMonitor()
- epochs = 100
复制
Mindspore实现的模型训练就很简单了,封装的比较好。
- model = Model(net, loss_fn=loss, optimizer=optim)
- model.train(epoch=epochs, train_dataset=train_dataset, callbacks=cb)
复制
在最终结果上,我们发现神经网络训练的拟合效果并不是很好,大概率因为Boston数据集数据量较少的原因。
