pytorch實現BP,處理多維資料輸入

2021-10-25 15:34:53 字數 2245 閱讀 9762

import torch

import matplotlib.pyplot as plt

import numpy as np

xy = np.

loadtxt

('000.txt'

, delimiter=

' ', dtype=np.float32)

x_data = torch.

from_numpy

(xy[:,

:-1]

) # 取前九列

y_data = torch.

from_numpy

(xy[:,

[-1]

]) # 取最後一列

class

model

(torch.nn.module)

: def __init__

(self)

:super

(model, self)

.__init__()

self.linear1 = torch.nn.

linear(9

,6)# linear(x1,x2)的兩個引數分別表示輸入輸出的維度(矩陣的列數)

#這裡的9與資料集的列數一至

self.linear2 = torch.nn.

linear(6

,4) self.linear3 = torch.nn.

linear(4

,1) self.sigmoid = torch.nn.

sigmoid()

#啟用函式用於實現非線性化

def forward

(self, x1)

: x1 = self.

sigmoid

(self.

linear1

(x1)

) x1 = self.

sigmoid

(self.

linear2

(x1)

) x1 = self.

sigmoid

(self.

linear3

(x1)

)return x1

model =

model()

# construct loss and optimizer

criterion = torch.nn.

bceloss

(reduction=

'sum'

)optimizer = torch.optim.

sgd(model.

parameters()

, lr=

0.02

)# model.parameters()自動完成引數的初始化操作

loss_sum =

# training cycle forward, backward, update

for epoch in range

(100):

y_pred =

model

(x_data) # forward 算**值

loss =

criterion

(y_pred, y_data) # forward: 算損失值

print

(epoch, loss.

item()

) loss_sum.

(loss)

optimizer.

zero_grad

() # 清除上一輪的梯度,防止累積

loss.

backward

() # backward: autograd,自動計算梯度,反向傳播

optimizer.

step

() # update 引數,即更新w和b的值

x =range

(100

)y = loss_sum

plt.

plot

(x, y)

plt.

xlabel

('epoch'

)plt.

ylabel

('loss'

)plt.

grid

() # 生成網格

pytorch多維篩選

多級篩選 比如結構是2 2 3,只想選第三維的最大的 tx index,best n,g y center,g x center index 01 best n 0,1 最後只取兩個值,第一行,第1列,第二行,第2列的。篩選第3維最大的值,下面的 不對,解決方法 查詢max原始碼 也可以把3維用vi...

處理多維陣列

在實際工作,我們經常會遇到對多維陣列的處理,一般就會採用多重迴圈的方式,直到陣列的最裡面那一層或者使用遞迴來處理,在php中可以使用array walk recursive來靈活處理 desc 處理多維陣列 param array data 待處理資料 param array field 處理字段陣...

pytorch 拓展cuda語言 多維索引問題

四維矩陣索引公式 四維矩陣 n,c,h,w 當前四維索引為 n,c,h,w,out idx n c h w c h w h w w pytorch中的 permute a torch.randn 5,3,4 a的size為 5,3,4 b a.permute 0,2,1 此時b的size會變成 5,...