美文网首页
第一次作业

第一次作业

作者: 邯山之郸 | 来源:发表于2021-03-15 17:28 被阅读0次
image.png
image.png
import torch
import torch.nn.functional as F
import os
import numpy as np
os.chdir(r"C:\Users\Eddie\Desktop")

def sigmoid(z):
    """The sigmoid function."""
    return 1.0/(1.0+np.exp(-z))

# 1. prepare dataset
x_data = torch.tensor([[0,0,0,0,0,0,0,0,0,1.0],
                        [0,0,0,0,0,0,0,0,1.0,0],
                        [0,0,0,0,0,0,0,1.0,0,0],
                        [0,0,0,0,0,0,1.0,0,0,0],
                        [0,0,0,0,0,1.0,0,0,0,0],
                        [0,0,0,0,1.0,0,0,0,0,0],
                        [0,0,0,1.0,0,0,0,0,0,0],
                        [0,0,1.0,0,0,0,0,0,0,0],
                        [0,1.0,0,0,0,0,0,0,0,0],
                        [1.0,0,0,0,0,0,0,0,0,0]])

y_data = torch.tensor([[0,0,0,0],
                        [0,0,0,1.0],
                        [0,0,1.0,0],
                        [0,0,1.0,1.0],
                        [0,1.0,0,0],
                        [0,1.0,0,1.0],
                        [0,1.0,1.0,0],
                        [0,1.0,1.0,1.0],
                        [1.0,0,0,0],
                        [1.0,0,0,1.0]])


# 2. Design model
class LogisticRegressionModel(torch.nn.Module):
    def __init__(self):
        super(LogisticRegressionModel, self).__init__()
        self.linear = torch.nn.Linear(10,4,bias = True)
    def forward(self, x):
        y_pred = torch.sigmoid(self.linear(x))
        return y_pred
model = LogisticRegressionModel()
model.load_state_dict(torch.load(r"models\net.pth")) # load weights and bias data

# 3. Construct loss and optimizer
# criterion = torch.nn.BCELoss(weight=None, size_average=True, reduce=True)
criterion = torch.nn.MSELoss(reduction='mean')
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
#-------------------------------------------------------#
# 4. Training cycle
for epoch in range(1000):
    y_pred = model(x_data)
    loss = criterion(y_pred, y_data)
    print(epoch, loss.item())
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
# 5. 保存权重数据
torch.save(obj=model.state_dict(), f=r"models\net.pth")
print("权重:",model.state_dict()['linear.weight'])
print("偏置:",model.state_dict()['linear.bias'])


# 6. 验证权重和偏置数据是否正确
w = np.array(model.state_dict()['linear.weight'])
b = np.array(model.state_dict()['linear.bias'])
w = np.transpose(w)
b = np.transpose(b)
y_hat = sigmoid(np.dot(x_data,w)+b)
print("结果:",y_hat)
print(np.int64(y_hat>0.5))

相关文章

网友评论

      本文标题:第一次作业

      本文链接:https://www.haomeiwen.com/subject/rdakcltx.html