1. 異或運算
2. 實現
1稍微改了一下網路結構,新增少量注釋,理解第16-17,37行。#利用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()))
結構如下:
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...