<深度学习入门与TensorFlow实践> - 笔记 IV

举报
黄生 发表于 2023/01/29 15:30:53 2023/01/29
【摘要】 欠拟合、过拟合的总结如下:接下来是TensorFlow框架部分,之前有个帖子基于TensorFlow 2建立深度学习的模型 - 快速入门https://bbs.huaweicloud.com/forum/thread-0238972383026220197-1-1.html然后会使用它来建立线性回归模型和神经网络分类模型敬请期待下面用之前的广告数据,来建立线性回归模型,看看tensorflo...

欠拟合、过拟合的总结如下:

image.png

接下来是TensorFlow框架部分,之前有个帖子
基于TensorFlow 2建立深度学习的模型 - 快速入门
https://bbs.huaweicloud.com/forum/thread-0238972383026220197-1-1.html

然后会使用它来建立线性回归模型

神经网络分类模型

敬请期待


下面用之前的广告数据,来建立线性回归模型,看看tensorflow2的一般建模过程。

import numpy as np
#1. 数据预处理:装载广告数据

def loadDataSet():
    x=[];y=[]
    
    f=open('./Ad.csv')
    
    for line in f.readlines()[1:]:
        lineArr=line.strip().split(',')
        x.append([float(lineArr[0]),float(lineArr[1]),float(lineArr[2])])
        y.append(float(lineArr[3]))
    return np.array(x),np.array(y).reshape(-1,1)

x,y=loadDataSet()

print('shape of x:' + str(x.shape))
print('shape of y:' + str(y.shape))

shape of x:(200, 3)
shape of y:(200, 1)

#把数据分为:训练和测试

np.random.seed(1)
train_x,train_y=x[:100],y[:100]
test_x,test_y=x[-100:],y[-100:]

#将y中心化、中心化后均值为0
#将x标准化、标准化后均值为0,方差为1

mean_x=np.mean(train_x,axis=0,keepdims=True)
sd_x=np.std(train_x,axis=0,keepdims=True)
mean_y=np.mean(train_y)

train_scaled_x=(train_x-mean_x)/sd_x
train_centered_y=train_y-mean_y

test_scaled_x=(test_x-mean_x)/sd_x
test_centered_y=test_y-mean_y

到这里,数据已经完成了预处理。


线性回归模型相当于下面的简单神经网络模型,它没有隐藏层、输出层只有1个节点,激活函数是线性函数。

image.png

使用 tf.keras.models.Sequential()构建模型

使用 model.compile() 设置优化方法、损失函数、评价指标
(损失函数的值即 训练误差;评价指标的值即 测试误差)

使用 model.fit() 带入训练数据,训练模型

import tensorflow as tf
print(tf.__version__)
import moxing as mox
mox.file.copy_parallel('obs://obs-aigallery-developer/experience/hw03426922/Ad.csv','Ad.csv')
import numpy as np
#1. 数据预处理:装载广告数据

def loadDataSet():
    x=[];y=[]
    
    f=open('./Ad.csv')
    
    for line in f.readlines()[1:]:
        lineArr=line.strip().split(',')
        x.append([float(lineArr[0]),float(lineArr[1]),float(lineArr[2])])
        y.append(float(lineArr[3]))
    return np.array(x),np.array(y).reshape(-1,1)

x,y=loadDataSet()

print('shape of x:' + str(x.shape))
print('shape of y:' + str(y.shape))

#把数据分为:训练和测试

np.random.seed(1)
train_x,train_y=x[:100],y[:100]
test_x,test_y=x[-100:],y[-100:]

#将y中心化、中心化后均值为0
#将x标准化、标准化后均值为0,方差为1

mean_x=np.mean(train_x,axis=0,keepdims=True)
sd_x=np.std(train_x,axis=0,keepdims=True)
mean_y=np.mean(train_y)

train_scaled_x=(train_x-mean_x)/sd_x
train_centered_y=train_y-mean_y

test_scaled_x=(test_x-mean_x)/sd_x
test_centered_y=test_y-mean_y

model=tf.keras.models.Sequential([tf.keras.layers.Dense(1,input_shape=(3,))])

model.compile(optimizer=tf.keras.optimizers.SGD(0.1), loss='mse',metrics=['mse'])
lm_history=model.fit(train_scaled_x,train_centered_y,epochs=50,verbose=0,\
                     batch_size=100,validation_data=(test_scaled_x,test_centered_y))

#可视化误差变化情况
# 中文显示乱码... 不必在意这些细节:(

%config InlineBackend.figure_format='retina'

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

plt.plot(lm_history.epoch,lm_history.history['mse'],label='训练误差')
plt.plot(lm_history.epoch,lm_history.history['val_mse'],label='测试误差')

plt.xlabel('迭代次数',fontsize=16)
plt.ylabel('模型误差',fontsize=16)
plt.legend(fontsize=16)
plt.show()

image.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。