deep learning Andrew学习笔记

Freezing one weight cause the same result with unfreezing(Deep learning书的一个练习)

  • 在神经网络训啦中,冻结某权重,总的误差依然会降为0的现象。
# 用灯的组合与能否通信数据来做
import numpy as np
import matplotlib.pyplot as plt
streetlights = np.array([
    [1,0,1],
    [0,1,1],
    [0,0,1],
    [1,1,1],
    [0,1,1],
    [1,0,1]
])
walk_vs_stop = np.array([0,1,0,1,1,0])
#定义相关函数
alpha = 0.1
def predict(X,W):
    return np.dot(X,W)
#训练
weight = np.array([0.5,0.48,-0.7]) #为了好看,weight设置个固定值
error = []
w = [[0.5,0.48,-0.7]]
for i in range(6):
    pre = predict(streetlights[i],weight)
    err = (pre - walk_vs_stop[i])**2
    delta = pre - walk_vs_stop[i]
    weight_delta = streetlights[i] * delta * alpha
    weight = weight - weight_delta
    if i != 5:
        w.append(weight)
    error.append(np.array(err))
print(error)
print(w)
fig, ax = plt.subplots()
ax.scatter(range(6),error)
plt.xlabel('run_times')
plt.ylabel('error')
plt.show()
[array(0.04), array(1.44), array(0.3136), array(0.147456), array(0.68425984), array(0.03080727)]
[[0.5, 0.48, -0.7], array([ 0.52,  0.48, -0.68]), array([ 0.52,  0.6 , -0.56]), array([ 0.52 ,  0.6  , -0.504]), array([ 0.5584,  0.6384, -0.4656]), array([ 0.5584 ,  0.72112, -0.38288])]

在这里插入图片描述

#同样的方法训练,只是每次不变最后一个
weight = np.array([0.5,0.48,-0.7]) #为了好看,weight设置个固定值
error = []
w = [[0.5,0.48,-0.7]]
for i in range(6):
    pre = predict(streetlights[i],weight)
    err = (pre - walk_vs_stop[i])**2
    delta = pre - walk_vs_stop[i]
    weight_delta = streetlights[i] * delta * alpha
    weight_delta[2] = 0 #新加的语句
    weight = weight - weight_delta
    if i != 5:
        w.append(weight)
    error.append(np.array(err))
print(error)
print(w)
fig, ax = plt.subplots()
ax.scatter(range(6),error)
plt.xlabel('run_times')
plt.ylabel('error')
plt.show()
[array(0.04), array(1.4884), array(0.49), array(0.334084), array(1.08201604), array(0.01493284)]
[[0.5, 0.48, -0.7], array([ 0.52,  0.48, -0.7 ]), array([ 0.52 ,  0.602, -0.7  ]), array([ 0.52 ,  0.602, -0.7  ]), array([ 0.5778,  0.6598, -0.7   ]), array([ 0.5778 ,  0.76382, -0.7    ])]

在这里插入图片描述

  • 看到这两次输出的weight结果差别不大,说明第三个weight确实不怎么影响结果,换个weight试试,还是error还是降低到了0……,控制两个呢
#同样的方法训练,只是每次不变最后一个
weight = np.array([0.5,0.48,-0.7]) #为了好看,weight设置个固定值
error = []
w = [[0.5,0.48,-0.7]]
for i in range(6):
    pre = predict(streetlights[i],weight)
    err = (pre - walk_vs_stop[i])**2
    delta = pre - walk_vs_stop[i]
    weight_delta = streetlights[i] * delta * alpha
    weight_delta[1] = 0 #新加的语句
    weight = weight - weight_delta
    if i != 5:
        w.append(weight)
    error.append(np.array(err))
print(error)
print(w)
fig, ax = plt.subplots()
ax.scatter(range(6),error)
plt.xlabel('run_times')
plt.ylabel('error')
plt.show()
[array(0.04), array(1.44), array(0.3136), array(0.254016), array(0.94789696), array(0.04586451)]
[[0.5, 0.48, -0.7], array([ 0.52,  0.48, -0.68]), array([ 0.52,  0.48, -0.56]), array([ 0.52 ,  0.48 , -0.504]), array([ 0.5704,  0.48  , -0.4536]), array([ 0.5704 ,  0.48   , -0.35624])]

在这里插入图片描述

  • 控制两个,也一样的
#同样的方法训练,只是每次不变最后一个
weight = np.array([0.5,0.48,-0.7]) #为了好看,weight设置个固定值
error = []
w = [[0.5,0.48,-0.7]]
for i in range(6):
    pre = predict(streetlights[i],weight)
    err = (pre - walk_vs_stop[i])**2
    delta = pre - walk_vs_stop[i]
    weight_delta = streetlights[i] * delta * alpha
    weight_delta[0] = 0 #新加的语句
    weight_delta[1] = 0 #新加的语句
    weight = weight - weight_delta
    if i != 5:
        w.append(weight)
    error.append(np.array(err))
print(error)
print(w)
fig, ax = plt.subplots()
ax.scatter(range(6),error)
plt.xlabel('run_times')
plt.ylabel('error')
plt.show()
[array(0.04), array(1.44), array(0.3136), array(0.274576), array(0.94400656), array(0.02118771)]
[[0.5, 0.48, -0.7], array([ 0.5 ,  0.48, -0.68]), array([ 0.5 ,  0.48, -0.56]), array([ 0.5  ,  0.48 , -0.504]), array([ 0.5   ,  0.48  , -0.4516]), array([ 0.5    ,  0.48   , -0.35444])]

在这里插入图片描述


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值