全球快资讯:用TensorFlow2.0框架实现BP网络
2023-03-01 11:55:48 来源:神经网络研究所
(相关资料图)
熬过了上一篇漫长的代码,稍微解开了一丢丢疑惑,使得抽象的BP有一点具体化了,可是还是有好多细节的东西没有讲清楚,比如,为什么要用激活函数?为什么随机梯度下降没有提到?下面我们来一一解开疑惑。
首先是为什么要使用激活函数?这要回顾一下我们在学习BP之前学习的感知器模型。它模仿的是人类体内的信号传导的过程,当信号达到一定的阈值时,就可以继续向后传播。
那这个感知器模型和BP网络有什么关系呢?在我们所看到的BP网络的结构图中,其实是被简化了的,下面小编画了一个逻辑更清晰一点的图:
这样我们就可以看出来,其实BP网络是由一个一个的感知器组成,也就构成了一个真正的神经网络,自然就能理解为什么要使用激活函数了。
接下来我们来看一下TensorFlow实现BP神经网络到底有多简单!
#构建一个结构为[10,15,1]的BP神经网络model = tf.keras.Sequential([tf.keras.layers.Dense(15,activation="relu",input_shape=(10,)), tf.keras.layers.Dense(1)])model.summary() #显示网络结构model.compile(optimizer="SGD",loss="mse") #定义优化方法为随机梯度下降,损失函数为mse#x->训练集,y——>bia标签,epochs=10000训练的次数,validation_data=(test_x,test_y)——>验证集history = model.fit(x,y,epochs=10000,validation_data=(test_x,test_y))
上面就是一个最简单的BP网络的网络结构,小编还准备好了完整的通用框架代码,不用总是修改隐藏层,可以直接使用哦!公众号发送“BP源码”就可以获取!是不是非常惊讶!昨天的百行代码完全消失了,这短短几行代码就可实现一个BP网络。
这里解释一下validation_data,这是验证集,作用和测试集是一样的,只不过验证集是在训练过程中对模型进行测试,这样方便观察模型的准确性。loss函数的作用是计算模型的预测误差,也就是是衡量模型的准确度,常用的误差函数还有mse,mae,rmse,mape等等,模型中有很多误差函数不能直接调用,但是可以自己定义。 SGD就是我们所说的随机梯度下降算法了,但是现在我们普遍认为“adam”是目前最好的优化算法,当然这也根据不同的神经网络做不同的选择。想要研究理论的读者可以去查一查资料,小编作为实战派就不对理论做过多的阐述了!
另外再列出来同样强大的pytorch框架的代码,大家可以自行选取。
class Model(nn.Module): def __init__(self): super().__init__() self.fc = nn.Sequential( nn.Linear(10, 15), nn.ReLU(), nn.Dropout(), #防止过度拟合,TensorFlow也有 nn.Linear(15, 2) ) def forward(self, x): x = self.fc(x) return x
关于选择哪一个框架的问题,在TensorFlow2.0出现之前,小编会推荐pytorch,现在的TensorFlow2.0和pytorch代码风格已经越来越接近了,但是TensorFlow2.0可以支持的平台更多,所以这里推荐TensorFlow2.0。
有什么问题,欢迎大家留言讨论!
互联网
首先是为什么要使用激活函数?这要回顾一下我们在学习BP之前学习的感知器模型。它模仿的是人类体内的信号传导的过程,当信号达到一定的阈值时
2023-03-01 11:55:48
全球滚动:浅谈0欧姆电阻的作用
单层板只能一面走线,当线路比较密集的时候走线很难,使用0欧姆电阻当做跳线使用,跨过走线,省去了过孔。
2023-03-01 11:59:43
天天热议:便携储能产品应用示意图及需求测算
从地域分布看,中国是便携式储能的主要生产国,美日为主要消费国。作为制造类产品,中国拥有便携式储能较为完整的产业链与集群,上下游配套设
2023-03-01 11:55:56