机器学习油耗实战

该博客介绍了如何利用TensorFlow处理AutoMPG汽车效能数据集,包括数据清洗、缺失值处理、特征工程以及数据标准化。接着,博主展示了如何划分训练集和测试集,并构建了一个自定义的三层全连接神经网络模型进行训练,使用均方误差和平均绝对误差作为损失函数。最后,博主展示了训练过程及部分训练结果。
摘要由CSDN通过智能技术生成

采用 Auto MPG 数据集

在线下载汽车效能数据集 dataset_path = keras.utils.get_file(“auto-mpg.data”, “http://archive.ics.uci.edu/ml/machine-learning-databases/auto-mpg/autompg.data”)column_names = [‘MPG’,‘Cylinders’,‘Displacement’,‘Horsepower’,‘Weight’, ‘Acceleration’, ‘Model Year’, ‘Origin’]raw_dataset = pd.read_csv(dataset_path, names=column_names, na_values = “?”, comment=’\t’, sep=" ", skipinitialspace=True) dataset = raw_dataset.copy()dataset.head() dataset.isna().sum() # 统计空白数据 dataset = dataset.dropna() # 删除空白数据项 dataset.isna().sum()把原来origin字段变为如下形式,新增三个字段# 先弹出(删除并返回)origin 这一列origin = dataset.pop(‘origin’)# 根据 origin 列来写入新的 3 个列 dataset[‘usa’] = (origin == 1)*1.0dataset[‘europe’] = (origin == 2)*1.0dataset[‘japan’] = (origin == 3)*1.0 按着 8:2 的比例切分训练集和测试集: train_dataset = dataset.sample(frac=0.8,random_state=0) test_dataset = dataset.drop(train_dataset.index) 移动 MPG 油耗效能这一列为真实标签 Y train_labels = train_dataset.pop(‘mpg’) test_labels = test_dataset.pop(‘mpg’)train_stats = train_dataset.describe()train_stats.pop(“mpg”)train_stats = train_stats.transpose() 标准化数据def norm(x): return (x - train_stats[‘mean’]) / train_stats[‘std’]normed_train_data = norm(train_dataset)normed_test_data = norm(test_dataset) 打印出训练集和测试集的大小:print(normed_train_data.shape,train_labels.shape)print(normed_test_data.shape, test_labels.shape)(314, 9) (314,) # 训练集共 314 行,输入特征长度为 9,标签用一个标量表示(78, 9) (78,) # 测试集共 78 行,输入特征长度为 9,标签用一个标量表示利用切分的训练集数据构建数据集对象:train_db = tf.data.dataset.from_tensor_slices((normed_train_data.values,train_labels.values)) # 构建 dataset 对象train_db = train_db.shuffle(100).batch(32) # 随机打散,批量化 网络实现为一个自定义网络类,只需要在初始化函数中创建各个子网络层,并在前向计算函数 call 中实现自定义网络类的计算逻辑即可。自定义网络类继承自keras.model 基类,这也是自定义网络类的标准写法,以方便地利用 keras.model 基类提供的 trainable_variables 等各种便捷功能 class network(keras.model): # 回归网络 def init(self): super(network, self).init() # 创建 3 个全连接层 self.fc1 = layers.dense(64, activation=‘relu’) self.fc2 = layers.dense(64, activation=‘relu’) self.fc3 = layers.dense(1)call(self, inputs, training=none, mask=none): # 依次通过 3 个全连接层 x = self.fc1(inputs) x = self.fc2(x) x = self.fc3(x) return x实例化网络对象和创建优化器:model = network() # 创建网络类实例# 通过 build 函数完成内部张量的创建,其中 4 为任意的 batch 数量, 9 为输入特征长度model.build(input_shape=(4, 9))model.summary() # 打印网络信息optimizer = tf.keras.optimizers.rmsprop(0.001) # 创建优化器,指定学习率训练:for epoch in range(200): # 200 个 epoch for step, (x,y) in enumerate(train_db): # 遍历一次训练集 # 梯度记录器 with tf.gradienttape() as tape: out = model(x) # 通过网络获得输出 loss = tf.reduce_mean(losses.mse(y, out)) # 计算 mse mae_loss = tf.reduce_mean(losses.mae(y, out)) # 计算 (mae mean absolute error ) if step % 10 == 0: # 打印训练误差 print(epoch, step, float(loss)) # 计算梯度,并更新 grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值