【tensorflow2.0】梯度下降算法、多层感知器(MLP)

梯度下降法

梯度下降法是一种致力于找到函数极值点的算法,所谓“学习”就是改进模型参数,以便通过大量训练步骤将损失最小化。梯度的输出向量表明了在每个位置损失函数增长最快的方向。
对于f(x) = ax + b:首先随机初始化a和b的很多值,然后计算它的梯度使z变小。每次改变a和b的大小就代表该模型的学习速度。代码model.compile(optimizer = 'adam'),adam优化算法默认了学习率为0.001。
而在深度学习中,局部极值点从来都不是问题。

多层感知器(MLP)

单层神经元无法拟合“异或”运算。
多层感知器多了中间的隐含层,可用tf.keras去实现。

常用的激活函数有:
relu:当x小于0时,输出为0;当x大于0时,会将x原样输出。
sigmoid:输出结果y值范围为(-1, 1),p(X) = 1/(1+e-X);x靠近0时,输出变化很大,当x远大于0或远小于0时,输出的变化很小,也就是说它传递的梯度很小。因此此激活函数很少用在中间层。
tanh
Leak relu:当x小于0时,会将数据稍稍传递一点;当x大于0时,会将x原样输出。常用于生成网络中。
在这里插入图片描述
(更正一下:Sigmoid是0到1之间)

data = pd.read_csv('dataset/Advertising.csv')

这个是读取当前目录下一个dataset文件夹里面的Advertising.csv文件。

data.head()

head()函数是pandas中的函数,主要是用它来初步检查一下读取的数据集是否正确。此函数默认会读取数据的前5行(第0-第4行)。

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

scatter()函数会画出散点图。其中,第一个变量为横坐标,第二个变量为纵坐标。

x = data.iloc[:, 1:-1]
y = data.iloc[:, -1]

iloc()函数也属于pandas库,用来提取行数据,data.iloc[:, 1:-1]为提取所有的行(所以前面是冒号),提取的是除去第一列和最后一列剩下的列。data.iloc[:, -1]为提取最后一列所有行。

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

建立一个顺序模型。在Sequential()函数中,可以用[]直接写每层,就省去了用add的麻烦,只需要在第一层告诉它input的形式。第一个Dense()函数的第一个参数为要输出的单元数,即中间的隐含层的单元数;第二个参数为输入的形状,本示例中是x,它为第一列到最后一列的所有元素,一共有三列,所以它是一个(3, )的元组;第三个参数是对中间层的激活函数选取。第二个Dense()函数添加了输出层,其参数为输出形状,此示例中输出为y,它是一个值。

model.summary()

可以看我们所建立的模型的框架。我们所构造的为两层的神经框架。
在这里插入图片描述
输入为3个参数x1、x2、x3,对于隐含层,它对应三个输入的权重还有一个偏置bus,而隐含层有10个单元,所以在隐含层就一共有40个参数。对于输出层,它对应10个隐含单元的权重w1、w2、…、w10,再加上一个偏置,所以输出层一共有11个参数。

接下来用compile()函数配置优化器和损失函数,为训练做准备:

model.compile(optimizer='adam',
              loss='mse'
)

因为现在的输出是一个固定的值,可以使用均方差损失函数。

接下来,用fit()函数在x,y上训练模型:

model.fit(x, y, epochs=100)

然后,测试一下:

test = data.iloc[:10, 1:-1]

取data数据前十行的第1-3列数据,用这十个数据用predict()函数预测一下,再比较一下前十行的实际值:

model.predict(test)

会显示预测的值

test = data.iloc[:10, -1]
test

会显示实际值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值