PyTorch 實現異或XOR運算

2022-06-29 16:45:12 字數 2413 閱讀 3461

1. 異或運算

2. 實現

1

#利用pytorch解決xor問題

2import

torch

3import

torch.nn as nn

4import

torch.nn.functional as f

5import

torch.optim as optim

6import

numpy as np

78 data = np.array([[1, 0, 1], [0, 1, 1],

9 [1, 1, 0], [0, 0, 0]], dtype='

float32')

10 x = data[:, :2]

11 y = data[:, 2]

121314#

初始化權重變數

15def

weight_init_normal(m):

16 classname = m.__class__.__name__

#是獲取類名,得到的結果classname是乙個字串

17if classname.find('

linear

') != -1: #

判斷這個類名中,是否包含"linear"這個字串,字串的find()方法,檢索這個字串中是否包含另乙個字串

18 m.weight.data.normal_(0.0, 1.)

19m.bias.data.fill_(0.)

2021

22class

xor(nn.module):

23def

__init__

(self):

24 super(xor, self).__init__

()25 self.fc1 = nn.linear(2, 3) #

隱藏層 3個神經元

26 self.fc2 = nn.linear(3, 4) #

隱藏層 4個神經元

27 self.fc3 = nn.linear(4, 1) #

輸出層 1個神經元

2829

defforward(self, x):

30 h1 = f.sigmoid(self.fc1(x)) #

之前也嘗試過用relu作為啟用函式, 太容易死亡relu了.

31 h2 =f.sigmoid(self.fc2(h1))

32 h3 =f.sigmoid(self.fc3(h2))

33return

h334

3536 net =xor()

相當於net.weight_init_normal()38#

39 x = torch.tensor(x.reshape(-1, 2))

40 y = torch.tensor(y.reshape(-1, 1))

4142

#定義loss function

43 criterion = nn.bceloss() #

mse44

#定義優化器

45 optimizer = optim.sgd(net.parameters(), lr=0.1, momentum=0.9) #

sgd46#訓練

47for epoch in range(500):

48 optimizer.zero_grad() #

清零梯度快取區

49 out =net(x)

50 loss =criterion(out, y)

51print

(loss)

52loss.backward()

53 optimizer.step() #

更新5455#

測試56 test =net(x)

57print("

input is {}

".format(x.detach().numpy()))

58print('

out is {}

'.format(test.detach().numpy()))

稍微改了一下網路結構,新增少量注釋,理解第16-17,37行。

結構如下:

XOR (異或)加密簡單實現

參考 一 xor 運算 邏輯運算之中,除了 and 和 or,還有一種 xor 運算,中文稱為 異或運算 它的定義是 兩個值相同時,返回false,否則返回true。也就是說,xor可以用來判斷兩個值是否不同。true xortrue false false xo lse false true xo...

加密101 異或(xor)

異或 xor 是邏輯運算子,符號是 當輸入同時為真或同時為假時,輸出為假。否則,輸出為真。xor可以叫做 可程式設計反向器 乙個輸入bit位決定要不要對另乙個輸入bit位取反。異或 xor 操作的圖示如上,在圖示左邊pi是明文文字 plaintext 的bit位,i是bit位的索引,因為我們要處理不...

xor異或演算法學習

異或 xor 是乙個數 算符。它應用於邏輯運算。計算機符號為 xor 其運算法則為 a b a b a b 如果a b兩個值不相同,則異或結果為1。如果a b兩個值相同,異或結果為0。異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法 二進位制下用1表示真,0表示假,則異或的運算法則為 0 0...