前言
本人在此前是从未学习过深度学习相关内容的,只是对其听说的比较多,本系列文章是为了记录本人的学习历程,希望对其他想学习深度学习又没有经验的同学有所帮助。
基于百度的飞桨工具对波士顿房价进行预测的步骤如下所示:
波士顿房价的数据则是由这位无私奉献的程序员贡献,博文地址
在正式开始之前需要先按照官方网站的安装教程安装飞桨
数据处理
- 第一步:读取数据,这里由于使用的从其他地方下载的csv文件数据,所以与官网的处理稍微不一样。
#从文件导入数据
datafile = 'D:\\git_python\\boston_housing_data.csv'
#每条数据包括14项,其中前面13项是影响因素,第14项是相应的房屋价格中位数
feature_names = [ 'CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', \
'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV' ]
feature_num = len(feature_names)
#读取数据
result = []
with codecs.open(datafile, encoding='utf-8-sig') as f:
for row in csv.DictReader(f, skipinitialspace=True):
da = []
for title in feature_names:
da.append(float(row[title]))
result.append(da)
data = np.array(result)
- 第二步:将原数据集拆分成训练集和测试集
ratio = 0.8
offset = int(data.shape[0] * ratio)
training_data = data[:offset]
- 第三步:对数据进行归一化处理
# 计算训练集的最大值,最小值,平均值
maximums, minimums, avgs = training_data.max(axis=0), training_data.min(axis=0), \
training_data.sum(axis=0) / training_data.shape[0]
# 对数据进行归一化处理
for i in range(feature_num):
#print(maximums[i], minimums[i], avgs[i])
data[:, i] = (data[:, i] - avgs[i]) / (maximums[i] - minimums[i])
# 训练集和测试集的划分比例
training_data = data[:offset]
test_data = data[offset:]
模型设计
定义线性回归的网络结构。此处我没看到为啥要用线性回归网络结构,希望有懂的朋友说明一下。
class Regressor(paddle.nn.Layer):
# self代表类的实例自身
def __init__(self):
# 初始化父类中的一些参数
super(Regressor, self).__init__()
# 定义一层全连接层,输入维度是13,输出维度是1
self.fc = Linear(in_features=13, out_features=1)
# 网络的前向计算
def forward(self, inputs):
x = self.fc(inputs)
return x
训练配置
设置训练参数
# 声明定义好的线性回归模型
model = Regressor()
# 开启模型训练模式
model.train()
# 加载数据
training_data, test_data = load_data()
# 定义优化算法,使用随机梯度下降SGD
# 学习率设置为0.01
opt = paddle.optimizer.SGD(learning_rate=0.01, parameters=model.parameters())
训练过程