之前学习过吴恩达老师的深度学习的视频,但是比较少代码的实践,而且很多理论知识理解不到位。通过这次集训营的学习,增强了实战能力,对很多知识也理解更深刻,也学会多了一个深度学习框架飞桨的基本使用。
一、主要学习内容及学习到的技术:
1、不用框架只用python来实现一个房价预测的案例
这个案例对一些概念如:前向计算、反向计算、损失函数、梯度下降的理解特别有用,以下是一部分关键代码,
主要包括前向计算、计算损失、梯度计算和梯度更新
def forward(self, x):
self.z1 = np.dot(x, self.w0) + self.b0 # N * 13
self.z2 = np.dot(self.z1, self.w1) + self.b1 # N * 13
self.z3 = np.dot(self.z2, self.w2) + self.b2 # N * 1
return self.z3
def loss(self, z, y):
error = z - y
num_samples = error.shape[0]
cost = error * error
cost = np.sum(cost) / num_samples
return cost
def gradient(self, x, y):
z3 = self.forward(x)
# print("*"*50)
gradient_w2 = (z3-y) * self.z2
gradient_w2 = np.mean(gradient_w2, axis=0)
gradient_w2 = gradient_w2[:, np.newaxis]
gradient_b2 = (z3 - y)
gradient_b2 = np.mean(gradient_b2)
gradient_w1 = (z3-y) * self.w2.T * self.z1
gradient_w1 = np.mean(gradient_w1, axis=0)
gradient_w1 = gradient_w1[:, np.newaxis]
gradient_b1 = (z3 - y) * self.w2.T
gradient_b1 = np.mean(gradient_b1)
w1 = self.w1.T
gradient_b0 = (z3-y) * self.w2.T * w1[0:1]
gradient_b0 = np.mean(gradient_b0)
gradient_b0 = gradient_b0.reshape(-1,1)
gradient_w0 = (z3-y) * self.w2.T * w1[0:1] * x
gradient_w0 = np.mean(gradient_w0, axis=0)
gradient_w0 = gradient_w0[:, np.newaxis]
for k in range(1,w1.shape[0],1):
t = w1[k:k+1]
gw0 = (z3-y) * self.w2.T * t * x
gw0 = np.mean(gw0, axis=0)
gw0 = gw0[:, np.newaxis]
gradient_w0 = np.hstack((gradient_w0,gw0))
b0 = (z3-y) * self.w2.T * t
b0 = np.mean(b0)
b0 = b0.reshape(-1,1)
gradient_b0 = np.hstack((gradient_b0,b0))
return gradient_w0, gradient_b0,gradient_w1, gradient_b1,gradient_w2, gra