当前位置:   article > 正文

深度学习入门,keras实现回归模型(1),2024年最新华为Python面试真题解析_深度学习最新模型

深度学习最新模型

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

在剩下的几行中,我们:

  • 确定唯一的邮政编码集,然后计算每个唯一邮政编码的数据点数。

  • 过滤掉计数低的邮政编码。 对于某些邮政编码,我们只有一两个数据点,这使得获得准确的房价估算即使并非不可能,也极具挑战性。

  • 将数据返回给调用函数。

现在让我们创建用于预处理数据的 process_house_attributes 函数:

def process_house_attributes(df, train, test):

initialize the column names of the continuous data

continuous = [“bedrooms”, “bathrooms”, “area”]

performin min-max scaling each continuous feature column to

the range [0, 1]

cs = MinMaxScaler()

trainContinuous = cs.fit_transform(train[continuous])

testContinuous = cs.transform(test[continuous])

我们定义函数。 process_house_attributes 函数接受三个参数:

  • df :pandas 生成的我们的数据框(前面的函数帮助我们从数据框中删除一些记录)

  • train :我们针对房价数据集的训练数据

  • test :我们的测试数据。

然后,我们定义了连续数据的列,包括卧室、浴室和房屋大小。

我们将采用这些值并使用 sklearn-learn 的 MinMaxScaler 将连续特征缩放到范围 [0, 1]。 现在我们需要预处理我们的分类特征,即邮政编码:

one-hot encode the zip code categorical data (by definition of

one-hot encoing, all output features are now in the range [0, 1])

zipBinarizer = LabelBinarizer().fit(df[“zipcode”])

trainCategorical = zipBinarizer.transform(train[“zipcode”])

testCategorical = zipBinarizer.transform(test[“zipcode”])

construct our training and testing data points by concatenating

the categorical features with the continuous features

trainX = np.hstack([trainCategorical, trainContinuous])

testX = np.hstack([testCategorical, testContinuous])

return the concatenated training and testing data

return (trainX, testX)

首先,我们将对邮政编码进行one-hot编码。

然后,我们将使用 NumPy 的 hstack 函数将分类特征与连续特征连接起来,将生成的训练和测试集作为元组返回。 请记住,现在我们的分类特征和连续特征都在 [0, 1] 范围内。

实现回归神经网络

===================================================================

img

图 5:我们的 Keras 回归架构。 网络的输入是一个数据点,包括家庭的#卧室、#浴室、面积/平方英尺和邮政编码。 网络的输出是具有线性激活函数的单个神经元。 线性激活允许神经元输出房屋的预测价格。

在我们训练 Keras 网络进行回归之前,我们首先需要定义架构本身。 今天我们将使用一个简单的多层感知器 (MLP),如图 5 所示。 打开models.py文件并插入以下代码:

import the necessary packages

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import BatchNormalization

from tensorflow.keras.layers import Conv2D

from tensorflow.keras.layers import MaxPooling2D

from tensorflow.keras.layers import Activation

from tensorflow.keras.layers import Dropout

from tensorflow.keras.layers import Dense

from tensorflow.keras.layers import Flatten

from tensorflow.keras.layers import Input

from tensorflow.keras.models import Model

def create_mlp(dim, regress=False):

define our MLP network

model = Sequential()

model.add(Dense(8, input_dim=dim, activation=“relu”))

model.add(Dense(4, activation=“relu”))

check to see if the regression node should be added

if regress:

model.add(Dense(1, activation=“linear”))

return our model

return model

首先,我们将从 Keras 导入所有必要的模块。通过编写一个名为 create_mlp 的函数来定义 MLP 架构。 该函数接受两个参数: dim : 定义我们的输入维度 regress : 一个布尔值,定义是否应该添加我们的回归神经元 我们将继续使用dim-8-4架构开始构建我们的MLP。 如果我们正在执行回归,我们会添加一个 Dense 层,其中包含一个具有线性激活函数的神经元。 通常我们使用基于 ReLU 的激活,但由于我们正在执行回归,我们需要一个线性激活。 最后,返回模型。

实现Keras 回归脚本

=======================================================================

现在是时候把所有的部分放在一起了!

打开 mlp_regression.py 文件并插入以下代码:

import the necessary packages

from tensorflow.keras.optimizers import Adam

from sklearn.model_selection import train_test_split

from pyimagesearch import datasets

from pyimagesearch import models

import numpy as np

import argparse

import locale

import os

construct the argument parser and parse the arguments

ap = argparse.ArgumentParser()

ap.add_argument(“-d”, “–dataset”, type=str, required=True,

help=“path to input dataset of house images”)

args = vars(ap.parse_args())

我们首先导入必要的包、模块和库。

我们的脚本只需要一个命令行参数 --dataset。 当您在终端中运行训练脚本时,您需要提供 --dataset 开关和数据集的实际路径。

让我们加载房屋数据集属性并构建我们的训练和测试分割:

construct the path to the input .txt file that contains information

on each house in the dataset and then load the dataset

print(“[INFO] loading house attributes…”)

inputPath = os.path.sep.join([args[“dataset”], “HousesInfo.txt”])

df = datasets.load_house_attributes(inputPath)

construct a training and testing split with 75% of the data used

for training and the remaining 25% for evaluation

print(“[INFO] constructing training/testing split…”)

(train, test) = train_test_split(df, test_size=0.25, random_state=42)

使用我们方便的 load_house_attributes 函数,并通过将 inputPath 传递给数据集本身,我们的数据被加载到内存中。

训练集和测试集按照4:1切分。 让我们扩展我们的房价数据:

find the largest house price in the training set and use it to

scale our house prices to the range [0, 1] (this will lead to

better training and convergence)

maxPrice = train[“price”].max()

trainY = train[“price”] / maxPrice

testY = test[“price”] / maxPrice

如评论中所述,将我们的房价缩放到 [0, 1] 范围将使我们的模型更容易训练和收敛。 将输出目标缩放到 [0, 1] 将减少我们的输出预测范围(相对于 [0, maxPrice ]),不仅使我们的网络训练更容易、更快,而且使我们的模型能够获得更好的结果。 因此,我们获取训练集中的最高价格,并相应地扩展我们的训练和测试数据。 现在让我们处理房屋属性:

process the house attributes data by performing min-max scaling

on continuous features, one-hot encoding on categorical features,

and then finally concatenating them together

print(“[INFO] processing data…”)

(trainX, testX) = datasets.process_house_attributes(df, train, test)

从 datasets.py 脚本中回忆 process_house_attributes 函数:

  • 预处理我们的分类和连续特征。

  • 通过最小-最大缩放将我们的连续特征缩放到范围 [0, 1]。

  • One-hot 编码我们的分类特征。

  • 连接分类特征和连续特征以形成最终特征向量。

现在让我们继续训练MLP模型:

create our MLP and then compile the model using mean absolute

percentage error as our loss, implying that we seek to minimize

the absolute percentage difference between our price predictions

and the actual prices

model = models.create_mlp(trainX.shape[1], regress=True)

opt = Adam(lr=1e-3, decay=1e-3 / 200)

model.compile(loss=“mean_absolute_percentage_error”, optimizer=opt)

train the model

print(“[INFO] training model…”)

model.fit(x=trainX, y=trainY,

validation_data=(testX, testY),

epochs=200, batch_size=8)

我们的模型用 Adam 优化器初始化,然后compile。 请注意,我们使用平均绝对百分比误差作为我们的损失函数,这表明我们寻求最小化预测价格和实际价格之间的平均百分比差异。

训练。

训练完成后,我们可以评估我们的模型并总结我们的结果:

make predictions on the testing data

print(“[INFO] predicting house prices…”)

preds = model.predict(testX)

compute the difference between the predicted house prices and the

actual house prices, then compute the percentage difference and

the absolute percentage difference

diff = preds.flatten() - testY

percentDiff = (diff / testY) * 100

absPercentDiff = np.abs(percentDiff)

compute the mean and standard deviation of the absolute percentage

difference

mean = np.mean(absPercentDiff)

std = np.std(absPercentDiff)

finally, show some statistics on our model

locale.setlocale(locale.LC_ALL, “en_US.UTF-8”)

print(“[INFO] avg. house price: {}, std house price: {}”.format(

locale.currency(df[“price”].mean(), grouping=True),

locale.currency(df[“price”].std(), grouping=True)))

print(“[INFO] mean: {:.2f}%, std: {:.2f}%”.format(mean, std))

第 57 行指示 Keras 对我们的测试集进行预测。

使用预测,我们计算:

  • 预测房价与实际房价之间的差异。

  • 百分比差异。

  • 绝对百分比差异。

  • 计算绝对百分比差异的均值和标准差。

  • 结果打印。

使用 Keras 进行回归并没有那么难,对吧? 让我们训练模型并分析结果!

Keras 回归结果

=====================================================================

img

图 6: Keras 回归模型采用四个数值输入,产生一个数值输出:房屋的预测值。

打开一个终端并提供以下命令(确保 --dataset 命令行参数指向您下载房价数据集的位置):

$ python mlp_regression.py --dataset Houses-dataset/Houses\ Dataset/

[INFO] loading house attributes…

[INFO] constructing training/testing split…

[INFO] processing data…

[INFO] training model…

Epoch 1/200

34/34 [==============================] - 0s 4ms/step - loss: 73.0898 - val_loss: 63.0478

Epoch 2/200

34/34 [==============================] - 0s 2ms/step - loss: 58.0629 - val_loss: 56.4558

Epoch 3/200

34/34 [==============================] - 0s 1ms/step - loss: 51.0134 - val_loss: 50.1950

Epoch 4/200

34/34 [==============================] - 0s 1ms/step - loss: 47.3431 - val_loss: 47.6673

Epoch 5/200

34/34 [==============================] - 0s 1ms/step - loss: 45.5581 - val_loss: 44.9802

Epoch 6/200

34/34 [==============================] - 0s 1ms/step - loss: 42.4403 - val_loss: 41.0660

Epoch 7/200

34/34 [==============================] - 0s 1ms/step - loss: 39.5451 - val_loss: 34.4310

Epoch 8/200

34/34 [==============================] - 0s 2ms/step - loss: 34.5027 - val_loss: 27.2138

Epoch 9/200

34/34 [==============================] - 0s 2ms/step - loss: 28.4326 - val_loss: 25.1955

Epoch 10/200

34/34 [==============================] - 0s 2ms/step - loss: 28.3634 - val_loss: 25.7194

Epoch 195/200

34/34 [==============================] - 0s 2ms/step - loss: 20.3496 - val_loss: 22.2558

Epoch 196/200

34/34 [==============================] - 0s 2ms/step - loss: 20.4404 - val_loss: 22.3071

Epoch 197/200

34/34 [==============================] - 0s 2ms/step - loss: 20.0506 - val_loss: 21.8648

Epoch 198/200

34/34 [==============================] - 0s 2ms/step - loss: 20.6169 - val_loss: 21.5130

Epoch 199/200

34/34 [==============================] - 0s 2ms/step - loss: 19.9067 - val_loss: 21.5018

Epoch 200/200

34/34 [==============================] - 0s 2ms/step - loss: 19.9570 - val_loss: 22.7063

[INFO] predicting house prices…

[INFO] avg. house price: $533,388.27, std house price: $493,403.08

[INFO] mean: 22.71%, std: 18.26%

从我们的输出中可以看出,我们最初的平均绝对百分比误差高达 73%,然后迅速下降到 30% 以下。

当我们完成训练时,我们可以看到我们的网络开始有点过拟合了。 我们的训练损失低至~20%; 然而,我们的验证损失约为 23%。

计算我们最终的平均绝对百分比误差,我们得到的最终值为 22.71%。 这个值是什么意思?

我们最终的平均绝对百分比误差意味着,平均而言,我们的网络在其房价预测中将降低约 23%,标准差为约 18%。

房价数据集的局限性

====================================================================

在房价预测中获得 22% 的折扣是一个好的开始,但肯定不是我们正在寻找的准确性类型。 也就是说,这种预测准确性也可以看作是房价数据集本身的局限性。 请记住,数据集仅包含四个属性:

  • 卧室数量

  • 浴室数量

  • 面积(即平方英尺)

  • 邮政编码

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的平均绝对百分比误差,我们得到的最终值为 22.71%。 这个值是什么意思?

我们最终的平均绝对百分比误差意味着,平均而言,我们的网络在其房价预测中将降低约 23%,标准差为约 18%。

房价数据集的局限性

====================================================================

在房价预测中获得 22% 的折扣是一个好的开始,但肯定不是我们正在寻找的准确性类型。 也就是说,这种预测准确性也可以看作是房价数据集本身的局限性。 请记住,数据集仅包含四个属性:

  • 卧室数量

  • 浴室数量

  • 面积(即平方英尺)

  • 邮政编码

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-wzdYh7Nx-1713090751846)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/604367
推荐阅读
相关标签
  

闽ICP备14008679号