本博客记录学习龙书的学习历程:
gtitub :https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book
向开源大神致敬!
1.神经元模型
其中线性模式,是由权重w和偏置b构成,具体示意图如下:
2.优化方法:
3.偏导的计算:
求导的方法不难,有基础的数学知识就可以看懂.
4.书上的线性模型实战例题:
书上的例题没有用到tensorflow的方法来求解。用的是自定义公式的方法来计算。
4.1 自己造一个点噪音的数据散点:
,噪点是均值为0,标准差为1的正态分布数据。
def load_data():
data = []
for i in range(100):
x = np.random.uniform(-10, 10) # 在-10和10之间随机输入float类型值
esp = np.random.normal(0, 1)
y = 1.477 * x + 0.89 + esp
data.append([x, y])
data = np.array(data)
return data
# plt.scatter(data[:,0],data[:,1])
# plt.xlim(-10,10)
# plt.show()
散点图:
4.2计算误差和计算梯度
def mse(b, w, points):
# 计算均方差
totalError = 0
for i in range(len(points)):
x = points[i, 0]
y = points[i, 1]
totalError += (y - (w * x + b)) ** 2
return totalError / float(len(points))
def step_gradient(b_current, w_current, points, lr):
# 计算偏导,更新w和b
b_gradient = 0
w_gradient = 0
M = float(len(points))
for i in range(len(points)):
x = points[i, 0]
y = points[i, 1]
b_gradient += (2 / M) * ((w_current * x + b_current) - y)
w_gradient += (2 / M) * x * ((w_current * x + b_current) - y)
new_b = b_current - lr * b_gradient
new_w = w_current - lr * w_gradient
return (new_b, new_w)
4.3 迭代和训练
def step_gradient(b_current, w_current, points, lr):
# 计算偏导,更新w和b
b_gradient = 0
w_gradient = 0
M = float(len(points))
for i in range(len(points)):
x = points[i, 0]
y = points[i, 1]
b_gradient += (2 / M) * ((w_current * x + b_current) - y)
w_gradient += (2 / M) * x * ((w_current * x + b_current) - y)
new_b = b_current - lr * b_gradient
new_w = w_current - lr * w_gradient
return (new_b, new_w)
w = 0
b = 0
lr = 0.001
points = load_data()
for step in range(10000):
b,w = step_gradient(b,w,points,lr)
loss = mse(b,w,points)
if step%500 ==0:
print(b,w,loss)
运行:
最终,损失函数稳定在0.83左右,此时,b=0799,w=1.46
这一章其实没有怎么讲深度学习的概念,主要还是将梯度下降法的思路,跟着书敲一敲代码,还是挺有意义的。