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)의 큰 글로벌 최소가되지 않을 수 있습니다.
동시에 우리의 데이터의 정확성으로 인해 동일한 것으로 간주 정확성 원래의 다른 지점으로 이어지는, 충분하지 않습니다.