Tensorflow2.0实现多层感知机

实验:根据在TV、无线电台和报纸这三个平台投放的广告量预测销量

一、导入库和数据

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = pd.read_csv(r'Advertising.csv', index_col=0)
data.head()

Tensorflow2.0实现多层感知机_第1张图片

#查看数据维度
data.shape

输出:(200, 4)

二、理论上广告投放量越多,销量越好,现在画图看一下是否是这种情况

#TV
plt.scatter(data.TV, data.sales)

Tensorflow2.0实现多层感知机_第2张图片
从上图可以看出基本上是线性关系

#无线电
plt.scatter(data.radio, data.sales)

Tensorflow2.0实现多层感知机_第3张图片

#报纸
plt.scatter(data.newspaper, data.sales)

Tensorflow2.0实现多层感知机_第4张图片
从上图可以看出在报纸上投放广告效果并不好

三、接下来构造模型

# 获得输入数据与输出数据
x = data.iloc[:, :-1]
y = data.iloc[:, -1]
#查看x
x.head()

Tensorflow2.0实现多层感知机_第5张图片

#查看y
y.head()

Tensorflow2.0实现多层感知机_第6张图片

#构建模型
model = tf.keras.Sequential([tf.keras.layers.Dense(10, input_shape=(3,), activation='relu'),
                             tf.keras.layers.Dense(1)])

在上一段代码中,tf.keras.Sequential用来构造一个顺序模型,另外’tf.keras.layers.Dense(10, input_shape=(3,), activation=‘relu’)'这句代码构造模型的第一层,第一个参数表示输出节点的个数,也就是中间层节点的个数,这里定义为10,中间层节点数越多,模型在训练集上表现越好,但是节点数过多的话也可能造成过拟合。第二个参数input_shape是输入数据的形状,也就是输入层节点个数,在这里数据集x中共有TV、radio、newspaper这三个属性,所以这里填(3,)。第三个参数activation='relu’是设定激活函数为relu。
tf.keras.layers.Dense(1)构造了输出层,输出维度是1,input_shape参数只有第一层需要填写,后面的层会自动计算这个参数。

模型大致形状如下:
Tensorflow2.0实现多层感知机_第7张图片

#查看模型摘要
model.summary()

Tensorflow2.0实现多层感知机_第8张图片
上图给出了模型摘要,共有两层dense(中间层)和dense_1(输出层), 中间层参数有40个,这是因为共有三个输入值,TV、radio、newspaper,这三个属性需要三个权重w1,w2,w3,另外需要一个偏置b,中间层共有10个节点,所以共有4*10=40个参数,写成公式为:y = w1×x1 + w2×x2 + w3×x3 + b

四、训练模型

#编译模型
#参数optimizer='adam':使用梯度下降法优化损失函数
#参数loss = 'mse':使用均方误差计算损失函数
model.compile(optimizer='adam',
              loss = 'mse'
)
#训练模型
#参数epochs=100:使用梯度下降法优化损失函数,下降100次后停止
model.fit(x, y, epochs=100)

Tensorflow2.0实现多层感知机_第9张图片
五、使用模型进行预测

model.predict(x)

Tensorflow2.0实现多层感知机_第10张图片

你可能感兴趣的:(tensorflow,tensorflow,深度学习,人工智能)