美文网首页
深度学习讲稿(29)

深度学习讲稿(29)

作者: 山岳之心 | 来源:发表于2021-03-16 20:12 被阅读0次

    5.6.2 批量梯度下降法的代码实现

    在开始代码之前,我们首先介绍一个numpy的小技巧:矩阵的展平。这里使用到的是numpy中的ravel函数,ravel的中文翻译是拆开,解开的意思。它就是将矩阵拆开成一个列向量。比如我们执行如下的代码:

    import numpy as np
    a = np.arange(81)
    a = a.reshape(9,9)
    print(a)
    a = a.ravel()
    print(a.shape)
    

    我们可以清楚地看到一个9 \times 9的矩阵被拆开成了一个列向量,形状为 (81,) 。

    为什么要这么做?

    因为计算机的内存是有序排列的,如果存储矩阵,我们知道可以用两个指标来获得矩阵中的一个值。这就意味着在数据结构上有两个互相关联的索引。这种开销虽然看上去很小,但对于很大的数据来说,开销变得极其巨大。但是如果展平了矩阵,使得它仅仅使用一个索引来存储,这就在计算中节省了很多的内存开销。所以,我们为了计算的效率,一般会将矩阵展平来操作。值得注意的是,另一个强大的计算机语言Matlab,它的强大的矩阵计算甚至可以达到C语言的速度。其本质的原因就在于它的存储本身就是将矩阵展平的。而且它虽然表面上是用行列指标来确定矩阵中的某个值,但实际上却是用乘法得到单指标来确定的。所以,这种存储方式决定了计算速度的提高。

    所以我们也来对梯度下降法的数据处理部分进行改进。我们之前的数据处理是这段代码:

    import numpy as np
    cost_of_material = np.array([38.3, 35, 31.2, 43.2, 44.2, 41.2])
    cost_of_sales = np.array([12.3, 11.2, 10.1, 9.2, 9.1, 9.6])
    cost_of_human = np.array([22,21.3,23.7,23.2,20.5,24.2])
    cost_of_product = np.array([7.2, 7.8, 8.3, 8.6, 8.8, 9.3])
    sell_price = np.array([100.1, 102, 99.2, 101.2, 103.8, 100.5])
    
    # 数据正规化,由于都是钱计价的,所以可以用同一个单位来正规化,比如这里使用100, 也可以不正规化,这里使用是为了提示你必须先考虑特征的正规化。
    cost_of_material /= 100
    cost_of_sales /= 100
    cost_of_human /= 100
    cost_of_product /= 100
    sell_price /= 100
    # 预设权重
    weights = np.array([0.6,0.2,0.8,0.9])
    # 学习速率
    learning_rate = np.array([0.5,0.5,0.5,0.5])
    
    # 转换成矩阵形式
    raw_data = np.vstack((cost_of_material,cost_of_sales,cost_of_human,cost_of_product))
    raw_data = raw_data.T
    print(raw_data)
    

    可以看到,raw_data是一个6 \times 4 的矩阵。

    相关文章

      网友评论

          本文标题:深度学习讲稿(29)

          本文链接:https://www.haomeiwen.com/subject/ipfjcltx.html