손놀림 깊이 학습 노트
0부터 선형 회귀 1을 실현하다.생성 데이터 집합 모델 정의 y=w1x1+w2x2+b y:labelx: 입력한features b: 편차.randn(a,b) 출력 a행 b열 정적 분포 샘플링 지점
%matplotlib inline
import torch
from IPython import display
from matplotlib import pyplot as plt
import numpy as np
import random
num_inputs = 2
num_examples = 1000
#y=Xw+b+ϵ x1,x2 features
true_w = [2, -3.4]
true_b = 4.2
#features 1000
features = torch.randn(num_examples, num_inputs,
dtype=torch.float32)
#labels , ,dim=0 row,dim=1 column
labels = true_w[0] * features[:, 0] + true_w[1] * features[:, 1] + true_b
labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()),
dtype=torch.float32)
print(features[0], labels[0])
둘.데이터 세트 디스플레이
def use_svg_display():
#
display.set_matplotlib_formats('svg')
def set_figsize(figsize=(3.5, 2.5)):# 3.5*2.5
use_svg_display()
#
plt.rcParams['figure.figsize'] = figsize
set_figsize()
plt.scatter(features[:, 1].numpy(), labels.numpy(), 1);
셋.데이터 읽기: 소량의 데이터 샘플 읽기 yield:return for (i, j, k): i-j, k를 보폭range (num): 0에서num list (): 목록으로 변환
def data_iter(batch_size,features,labels):
num_examples=len(features)#featuresdim=0 ,1000
indices=list(range(num_examples))#0-1000
random.shuffle(indices)#
# 0-1000, 10
for i in range(0,num_examples,batch_size):
j=torch.LongTensor(indices[i:min(i+batch_size,num_examples)])# batch,Min() ,indics[i:j], i-j
yield features.index_select(0,j),labels.index_select(0,j)# return index_select)_
batch_size = 10
for X,y in data_iter(batch_size,features,labels):
print(X,y)
break
넷.초기화 모델 매개 변수 torch.mm(a,b): 매트릭스 a 매트릭스 b, 여기 ab로 쓸 수 있어요.
#
w = torch.tensor(np.random.normal(0, 0.01, (num_inputs, 1)), dtype=torch.float32)
b = torch.zeros(1, dtype=torch.float32)#
w.requires_grad_(requires_grad=True)#
b.requires_grad_(requires_grad=True)
#X ,
def linreg(X,w,b):
return torch.mm(X,w)+b
#loss function
def squared_loss(y_hat,y):
return (y_hat-y.view(y_hat.size()))**2/2
오.최적화 알고리즘은 w, b를 끊임없이 교체하여 최우수값grad와backward()를 얻을 수 있다. 백워드()를 실행할 때야말로 진정한 실행 구도이다.grad는 이 변수가 구도해야 한다는 것을 의미한다(w, b).백워드는 표량에 대한 구도에 파라미터가 없다.
# 。 。 。
def sgd(params,lr,barch_size):
for param in params:
#.grad
param.data-=lr*param.grad/batch_size```
.
```python
#
lr = 0.03
num_epochs = 3
net = linreg
loss = squared_loss
for epoch in range(num_epochs):# num_epochs
# , ( )
#X y
for X,y in data_iter(batch_size, features, labels):
l=loss(net(X,w,b),y).sum()# l X y
l.backward()# , w,b
sgd([w, b], lr, batch_size) # , w,b
#
w.grad.data.zero_()
b.grad.data.zero_()
# w,b loss
train_l=loss(net(features,w,b),labels)
#item() python
print('epoch%d,loss %f'%(epoch,train_l.mean().item()))
epoch0,loss 0.000046
epoch1,loss 0.000046
epoch2,loss 0.000046
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.