AI 전투 2019BUAA_ 세 번째 작업 _ 싱 끊기 (들)

AI 전투 2019BUAA_ 세 번째 작업 _ 싱 끊기 (들)


1. 이동

계획 함유량
이 작품은 과정 속 AI 전투 2019
어디에서 작업이 요구 사항 여기에
이 과정에서 내 목표는 이해하고 인공 지능의 몇 가지 일반적인 지식을 적용 할 수 있습니다
작업의 특정 측면에있는 나 목표를 달성하는 데 도움 그라데이션 하강 과정을 잘 알고

2. 운영 요구 사항

  • 그라데이션 하강 방법 minibatch 사용
  • 랜덤 데이터로서 선정
  • 배치 크기는 실행 5,10,15으로 선택
  • 원기를 회복시키는 과정은 이야기와 2D 회로도의 기능의 손실에 대한 질문에 대한 답변 :

3. 특정 코드 구현

import numpy as np
import pandas as pd
from pathlib import Path
import matplotlib.pyplot as plt

plt.rcParams['figure.figsize'] = (8, 8)

#两个数据文件
x_data_name = "TemperatureControlXData.dat"
y_data_name = "TemperatureControlYData.dat"

class CData(object):
    def __init__(self, loss, w, b, epoch, iteration):
        self.loss = loss
        self.w = w
        self.b = b
        self.epoch = epoch
        self.iteration = iteration  

#进行数据读取
def ReadData():
    Xfile = Path(x_data_name)
    Yfile = Path(y_data_name)
    if Xfile.exists() & Yfile.exists():
        X = np.load(Xfile)
        Y = np.load(Yfile)
        return X.reshape(-1, 1),Y.reshape(-1, 1)
    else:
        return None,None

#进行数据的随机选取
def shuffle_batch(X, y, batch_size):
    rnd_idx = np.random.permutation(len(X))
    n_batches = len(X)//batch_size
    for batch_idx in np.array_split(rnd_idx, n_batches):
        X_batch, y_batch = X[batch_idx], y[batch_idx]
        yield X_batch, y_batch

#进行前向传播
def forward_prop(X, W, b):
    return np.dot(X, W) + b

def backward_prop(X, y, y_hat):
    dZ = y_hat - y
    dW = 1/len(X)*X.T.dot(dZ)
    db = 1/len(X)*np.sum(dZ, axis=0, keepdims=True)
    return dW, db

def compute_loss(y_hat, y):
    return np.mean(np.square(y_hat - y))/2
    
#进行学习率、epochs数、batch_size的设置
X, y = ReadData()
N, D = X.shape
learning_rate = 0.01
n_epochs = 50
batch_size = 10

W = np.random.randn(D, 1)
b = np.zeros(1)

best_loss = np.infty
W_lis = []
b_lis = []
loss_lis = []
for epoch in range(n_epochs):
    for X_batch, y_batch in shuffle_batch(X, y, batch_size):
        y_hat = forward_prop(X_batch, W, b)
        dW, db = backward_prop(X_batch, y_batch, y_hat)
        W = W - learning_rate*dW
        b = b - learning_rate*db
        W_lis.append(W[0, 0])
        b_lis.append(b[0, 0])
        loss = compute_loss(forward_prop(X, W, b), y)
        loss_lis.append(loss)
        if loss < best_loss:
            best_loss = loss

plt.figure(figsize=(16, 10))
p5,=plt.plot(batch_result['5'])
p10,=plt.plot(batch_result['10'])
p15,=plt.plot(batch_result['15'])
plt.legend([p5,p10,p15],["batch_size=5","batch_size=10","batch_size=15"])
plt.ylim(0.004,0.01)
plt.xlim(0,1000)
plt.xlabel('epoch_times')
plt.ylabel('loss_MSE')
plt.show()

 4. 실행 결과

  • 및 0.1

  • 및 0.01 내지

  • 및 = 0.2

5. 요약 및 분석

  • 학습 속도 ETA의 증가와 함께, 증가 된 변동성 곡선 지터도 SGD을 증가 극점 부근에서 발생 점프
  • 일괄 처리 크기를 변경, 그것은 학습 속도를 변경할 것이다 배치 크기가 너무 크거나 너무 작은 학습 속도를 개선하기 위해 도움이되지 않습니다

6. 질문

1) 왜 타원형?
그래픽은 원을 그리는 데 필요한 경우,이 기능을 수정해야합니다 특성 손실 함수는 원 유사한 기능입니다 있습니다
2) 왜 타원 영역이 아닌 점의 중심은?
타원형 영역 손실 함수가 실제로 이산 점 더미이며, 단지도 감소된다. 상기 영역처럼 보인다.
그리고 우리의 분석 때문에 (승 b)는 점은 제한적이기 때문에 포인트 만 지역 (B, W)의 큰 글로벌 최소가되지 않을 수 있습니다.
동시에 우리의 데이터의 정확성으로 인해 동일한 것으로 간주 정확성 원래의 다른 지점으로 이어지는, 충분하지 않습니다.

추천

출처www.cnblogs.com/ReinHt/p/10979930.html