zl程序教程

您现在的位置是:首页 >  其它

当前栏目

2020人工神经网络第一次作业-参考答案第十部分-第三小题

部分 2020 作业 第三 第一次 参考答案 人工神经网络 第十
2023-09-11 14:15:21 时间

本文是 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投影

▲ 对图像进行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

▲ 将平均值小于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=nIx[n]nIx[n]n,Yc=nIy[n]nIy[n]n

centerx = imx.dot(arange(len(imx)))/sum(imx)
centery = imy.dot(arange(len(imy)))/sum(imy)

▲ 计算出的X,Y方向的重心

▲ 计算出的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
#============================================================