2020人工神经网络第一次作业-参考答案第十部分-第三小题
本文是 2020人工神经网络第一次作业 的参考答案第十部分
➤第十题参考答案-第3小题
1.题目分析
识别图像是在黑色背景下的四个点组成的目标。它具有特定的方向。
▲ 图片样例
图片的基本参数为:
-
图片的尺寸:
图片的高:495
图片的宽:761 -
有效区域:
Left = 67; Top = 9
width = 623; Height = 465
2.求解过程
(1)采集、平滑处理
▲ 图片基本处理
(2)寻找亮点中心
- 对X,Y进行投影取平均:
垂直投影取平均: imdata.mean(0)
水平投影取平均:imdata.mean(1)
▲ 对图像进行X,Y投影
- 将投影平均值小于18的置零
imx[imx < 18]=0
imy[imy < 18] = 0
获得图片在X,Y方向上的投影平均值,并去除了背景噪声:
I
x
[
n
]
,
I
y
[
n
]
I_x \left[ n \right],\,\,I_y \left[ n \right]
Ix[n],Iy[n]
▲ 将平均值小于18数值置为0
- 计算出投影中心
X c = ∑ n I x [ n ] ⋅ n ∑ n I x [ n ] , Y c = ∑ n I y [ n ] ⋅ n ∑ n I y [ n ] X_c = {{\sum\limits_n^{} {I_x \left[ n \right] \cdot n} } \over {\sum\limits_n^{} {I_x \left[ n \right]} }},\,\,Y_c = {{\sum\limits_n^{} {I_y \left[ n \right] \cdot n} } \over {\sum\limits_n^{} {I_y \left[ n \right]} }} Xc=n∑Ix[n]n∑Ix[n]⋅n,Yc=n∑Iy[n]n∑Iy[n]⋅n
centerx = imx.dot(arange(len(imx)))/sum(imx)
centery = imy.dot(arange(len(imy)))/sum(imy)
▲ 计算出的X,Y方向的重心
※ 未完待补充
▲ 图片的角度
3.结果分析
▲ 训练不收了的情况
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# HW10_3.PY -- by Dr. ZhuoQing 2020-11-29
#
# Note:
#============================================================
from headm import *
from bp1sigmoid import *
data, angle = tspload('train_data', 'data', 'angle')
data = squeeze(data)
angle = angle.reshape(1,-1)
x_train = data/255
y_train = angle / 360
printff(x_train.shape, y_train.shape)
printf(y_train)
#------------------------------------------------------------
DISP_STEP = 100
def train(X, Y, number_iteration, learning_rate, print_cost=False, Hn=10):
parameters = initialize_parameters(X.shape[1], Hn, Y.shape[0])
costdim = []
for i in range(0, number_iteration):
A2,cache = forward_propagate(X, parameters)
cost = calculate_cost(A2, X, parameters)
grads = backward_propagate(parameters, cache, X, Y)
parameters = update_parameters(parameters, grads, learning_rate)
if print_cost and i % DISP_STEP == 0:
printf('Cost after iteration:%i = %f'%(i, cost))
costdim.append(cost)
return parameters, costdim
#------------------------------------------------------------
parameters, cost = train(x_train, y_train, 5000, 0.5, True, 10)
stepdim = arange(0, len(cost)) * DISP_STEP
plt.plot(stepdim, cost)
plt.xlabel("Step")
plt.ylabel("Error")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : HW10_3.PY
#============================================================
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# BP1SIGMOID.PY -- by Dr. ZhuoQing 2020-11-17
#
# Note:
#============================================================
from headm import *
#------------------------------------------------------------
# Samples data construction
random.seed(int(time.time()))
#------------------------------------------------------------
def shuffledata(X, Y):
id = list(range(X.shape[0]))
random.shuffle(id)
return X[id], (Y.T[id]).T
#------------------------------------------------------------
# Define and initialization NN
def initialize_parameters(n_x, n_h, n_y):
W1 = random.randn(n_h, n_x) * 0.5 # dot(W1,X.T)
W2 = random.randn(n_y, n_h) * 0.5 # dot(W2,Z1)
b1 = zeros((n_h, 1)) # Column vector
b2 = zeros((n_y, 1)) # Column vector
parameters = {'W1':W1,
'b1':b1,
'W2':W2,
'b2':b2}
return parameters
#------------------------------------------------------------
# Forward propagattion
# X:row->sample;
# Z2:col->sample
def forward_propagate(X, parameters):
W1 = parameters['W1']
b1 = parameters['b1']
W2 = parameters['W2']
b2 = parameters['b2']
Z1 = dot(W1, X.T) + b1 # X:row-->sample; Z1:col-->sample
A1 = 1/(1+exp(-Z1))
Z2 = dot(W2, A1) + b2 # Z2:col-->sample
A2 = Z2 # Linear output
cache = {'Z1':Z1,
'A1':A1,
'Z2':Z2,
'A2':A2}
return Z2, cache
#------------------------------------------------------------
# Calculate the cost
# A2,Y: col->sample
def calculate_cost(A2, Y, parameters):
err = [x1-x2 for x1,x2 in zip(A2.T, Y.T)]
cost = [dot(e,e) for e in err]
return mean(cost)
#------------------------------------------------------------
# Backward propagattion
def backward_propagate(parameters, cache, X, Y):
m = X.shape[0] # Number of the samples
W1 = parameters['W1']
W2 = parameters['W2']
A1 = cache['A1']
A2 = cache['A2']
dZ2 = (A2 - Y)
dW2 = dot(dZ2, A1.T) / m
db2 = sum(dZ2, axis=1, keepdims=True) / m
dZ1 = dot(W2.T, dZ2) * (A1 * (1-A1))
dW1 = dot(dZ1, X) / m
db1 = sum(dZ1, axis=1, keepdims=True) / m
grads = {'dW1':dW1,
'db1':db1,
'dW2':dW2,
'db2':db2}
return grads
#------------------------------------------------------------
# Update the parameters
def update_parameters(parameters, grads, learning_rate):
W1 = parameters['W1']
b1 = parameters['b1']
W2 = parameters['W2']
b2 = parameters['b2']
dW1 = grads['dW1']
db1 = grads['db1']
dW2 = grads['dW2']
db2 = grads['db2']
W1 = W1 - learning_rate * dW1
W2 = W2 - learning_rate * dW2
b1 = b1 - learning_rate * db1
b2 = b2 - learning_rate * db2
parameters = {'W1':W1,
'b1':b1,
'W2':W2,
'b2':b2}
return parameters
#------------------------------------------------------------
# END OF FILE : BP1SIGMOID.PY
#============================================================
相关文章
- Google Earth Engine(python/Java)——卷积神经网络第3部分
- 2020人工神经网络第一次作业-参考答案第七部分
- 2020人工神经网络第一次作业-参考答案第五部分
- 2020人工神经网络第一次作业-参考答案第二部分
- 怎么设置工作表里的部分单元格不允许编辑
- 《网站设计 开发 维护 推广 从入门到精通》——第1部分 入门篇 第1章 网页设计基础 1.1 网页设计的相关术语
- 《网站情感化设计与内容策略》一第一部分 情感化设计
- Cesium数据可视化-仓储调度系统可视化部分(附github源码)
- Clover config.plist Boot部分
- 输入一个浮点数得到小数和整数部分
- MongoDB国内学术研究(部分)
- 受够了碎片化,Salesforce决定只支持部分安卓设备