Pytorch 사용 Pytorch 의합 다항식(다항식 회귀)
실전 몇 개의 Pytorch 의 예 를 통 해 데이터 세트 생 성,각종 네트워크 계층 구조의 정의,전방 향 전파 와 가중치 업데이트 방식 을 포함 하여 Pytorch 의 사용 방법 을 숙지 하 기 를 바 랍 니 다.
여기
분명히 여기 서 우 리 는 가정 만 하면 된다.
여기 서 우 리 는 적당 한 사이즈 의 전체 연결 네트워크 를 설정 하고 계속 교체 에 따라 가장 가 까 운 파 라 메 터 를 구하 면 된다.
그러나 여기 서 한 가지 문 제 를 생각해 야 한다.전체 연결 네트워크 구 조 를 사용 하 는 것 은 의심의 여지 가 없다.그러나 우리 의 입 출력 형식 은 어떤 것 일 까?
하나의 x 만 입력 하 는 것 이 합 리 적 입 니까?분명히 불합리 하 다.모든 뉴 런 은 사실 wx+b 의 계산 과정 을 모 의 한 것 이기 때문에 멱 연산 을 모 의 할 수 없다.그래서 우 리 는 x,x 의 제곱,x 의 3 차원,x 의 4 차원 을 하나의 벡터 로 조합 하여 입력 해 야 한다.n 개의 서로 다른 x 값 이 있다 고 가정 하면 우 리 는 n 개의 조합 벡터 를 합 쳐 입력 행렬 을 구성 할 수 있다.
이 단계 코드 는 다음 과 같 습 니 다.
def make_features(x):
x = x.unsqueeze(1)
return torch.cat([x ** i for i in range(1,4)] , 1)
우 리 는 네트워크 입력 으로 랜 덤 수 를 만들어 야 한다.
def get_batch(batch_size=32):
random = torch.randn(batch_size)
x = make_features(random)
'''Compute the actual results'''
y = f(x)
if torch.cuda.is_available():
return Variable(x).cuda(), Variable(y).cuda()
else:
return Variable(x), Variable(y)
그 중의 f(x)정 의 는 다음 과 같다.
w_target = torch.FloatTensor([0.5,3,2.4]).unsqueeze(1)
b_target = torch.FloatTensor([0.9])
def f(x):
return x.mm(w_target)+b_target[0]
다음 정의 모델:
class poly_model(nn.Module):
def __init__(self):
super(poly_model, self).__init__()
self.poly = nn.Linear(3,1)
def forward(self, x):
out = self.poly(x)
return out
if torch.cuda.is_available():
model = poly_model().cuda()
else:
model = poly_model()
다음은 손실 함수 와 최적화 기 를 정의 합 니 다.
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr = 1e-3)
네트워크 위 젯 정의 완료 후 훈련 시작:
epoch = 0
while True:
batch_x,batch_y = get_batch()
output = model(batch_x)
loss = criterion(output,batch_y)
print_loss = loss.data[0]
optimizer.zero_grad()
loss.backward()
optimizer.step()
epoch+=1
if print_loss < 1e-3:
break
여기까지 우리 의 모든 코드 를 다 두 드 렸 으 니,이어서 우 리 는 그 중의 일부 코드 를 상세 하 게 이해 하기 시작 했다.Makefeatures()정의 에서 torch.cat 는 계 산 된 벡터 를 행렬 로 연결 합 니 다.unsqueeze 는 차원 의 변 화 를 만 드 는 것 이다.
get_batch 에서 torch.randn 은 지 정 된 차원 을 만 드 는 난수 입 니 다.만약 당신 의 기계 가 GPU 가속 을 지원 한다 면 Variable 을 GPU 에 놓 고 연산 할 수 있 습 니 다.유사 한 문장의 의미 가 통 합 됩 니 다.
x.mm 는 행렬 곱셈 이다.
모델 정 의 는 중요 한 것 입 니 다.사실은 Pytorch 를 파악 한 후에 모델 정의 가 매우 간단 하고 각종 기본 적 인 층 구조 가 모두 당신 에 게 포장 되 어 있다 는 것 을 알 게 될 것 입 니 다.모든 층 구조 와 손실 함 수 는 torch.nn 에서 왔 고 모든 모델 구축 은 이 기본 N.Module 에서 계승 되 었 습 니 다.모델 정의 중,init__forward 와 템 플 릿 이 있 으 니 여러분 스스로 체험 할 수 있 습 니 다.
N.Linear 는 선형 연산 을 하 는 것 으로 매개 변수의 의 미 는 입력 층 과 출력 층 의 구 조 를 대표 한다.즉,3*1 이다.훈련 단계 에서 몇 줄 은 Pytorch 가 다른 프레임 워 크 와 다른 것 입 니 다.먼저 loss 는 Variable 입 니 다.loss.data 를 통 해 Tensor 를 추출 한 다음 에 data[0]를 통 해 int 또는 float 형식의 값 을 얻 을 수 있 습 니 다.우 리 는 기본 연산 이나 표 시 를 할 수 있 습 니 다.경사도 를 계산 하기 전에 경사도 를 0 으로 돌려 야 한다.그렇지 않 으 면 경사도 가 중첩 된다.개인 적 으로 다른 문 구 는 이해 하기 쉬 우 니 의문 이 있 으 면 아래 에서 평론 할 수 있다.
다음은 우리 의 의합 결과 이다.
사실 효과 가 좋 을 것 입 니 다.아주 간단 한 전 접속 네트워크 이기 때문에 이 작은 예 를 통 해 Pytorch 의 기본 적 인 조작 을 배 울 수 있 기 를 바 랍 니 다.앞으로 우 리 는 계속 업데이트 할 것 입 니 다.전체 코드 는 찍 어 주세요https://github.com/ZhichaoDuan/PytorchCourse
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정확도에서 스케일링의 영향데이터셋 스케일링은 데이터 전처리의 주요 단계 중 하나이며, 데이터 변수의 범위를 줄이기 위해 수행됩니다. 이미지와 관련하여 가능한 최소-최대 값 범위는 항상 0-255이며, 이는 255가 최대값임을 의미합니다. 따...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.