大道至简,SQL也可以实现神经网络

本文探讨了如何使用纯SQL实现简单的神经网络训练。作者通过在SQL中定义参数,利用列来表示权重矩阵和偏置向量,通过多层嵌套查询实现了神经网络的训练过程。
摘要由CSDN通过智能技术生成

最近写SQL写多了,突发奇想SQL是不是也能实现简单的神经网络训练呢?于是带着这个问题在GitHub上找了找,还真有....那么本文就来分享一下如何用纯SQL实现一个神经网络吧!

题外话,可能有很多人会有疑问,你一个搞算法的,为啥在写SQL?这....就说来话长了... 总之,技多不压身嘛!

回归正题,我们再用SQL建模时,利用列来定义参数,从输入层到隐藏层,我们用 w1_00, w1_01, w1_10, w1_11表示权重矩阵W1,用b1_0, b1_1表示偏置向量B1。从隐藏层到输出层,我们用 w2_00, w2_01, w2_10, w2_11表示权重矩阵W2,用b2_0, b2_1表示偏置向量B2。这样我们通过一个多层嵌套的查询语句实现了整个训练过程。

7fe4e564b2f48d6f04532c9571119bc9.png
add_iteration_sql = """
SELECT
x1,x2,y,
  w_00 - (2.0)*(dw_00+(1e-3)*w_00) AS w1_00,
  w_01 - (2.0)*(dw_01+(1e-3)*w_01) AS w1_01,
  w_10 - (2.0)*(dw_10+(1e-3)*w_10) AS w1_10,
  w_11 - (2.0)*(dw_11+(1e-3)*w_11) AS w1_11,
  b_0 - (2.0)*db_0 AS b_0,
  b_1 - (2.0)*db_1 AS b_1,
  w2_00 - (2.0)*(dw2_00+(1e-3)*w2_00) AS w2_00,
  w2_01 - (2.0)*(dw2_01+(1e-3)*w2_01) AS w2_01,
  w2_10 - (2.0)*(dw2_10+(1e-3)*w2_10) AS w2_10,
  w2_11 - (2.0)*(dw2_11+(1e-3)*w2_11) AS w2_11,
  b2_0 - (2.0)*db2_0 AS b2_0,
  b2_1 - (2.0)*db2_1 AS b2_1
FROM (
  SELECT
    *,
    SUM(x1*dhidden_0) OVER () AS dw_00,
    SUM(x1*dhidden_1) OVER () AS dw_01,
    SUM(x2*dhidden_0) OVER () AS dw_10,
    SUM(x2*dhidden_1) OVER () AS dw_11,
    SUM(dhidden_0) OVER () AS db_0,
    SUM(dhidden_1) OVER () AS db_1
  FROM (
    SELECT
      *,
      SUM(d0*dscores_0) OVER () AS dw2_00,
      SUM(d0*dscores_1) OVER () AS dw2_01,
      SUM(d1*dscores_0) OVER () AS dw2_10,
      SUM(d1*dscores_1) OVER () AS dw2_11,
      SUM(dscores_0) OVER () AS db2_0,
   
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值