<深度学习入门与TensorFlow实践> - 笔记 IV
【摘要】 欠拟合、过拟合的总结如下:接下来是TensorFlow框架部分,之前有个帖子基于TensorFlow 2建立深度学习的模型 - 快速入门https://bbs.huaweicloud.com/forum/thread-0238972383026220197-1-1.html然后会使用它来建立线性回归模型和神经网络分类模型敬请期待下面用之前的广告数据,来建立线性回归模型,看看tensorflo...
欠拟合、过拟合的总结如下:
接下来是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个节点,激活函数是线性函数。
使用 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()
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)