CNN模型结构【每行注释非常细致】,可以解决异或问题

import torch
device = 'cuda' if torch.cuda.is_available() else 'cpu' # 根据是否有可用的GPU来决定使用哪种设备
torch.manual_seed(777) # 设置随机种子
if device == 'cuda': # 如果设备是GPU
    torch.cuda.manual_seed_all(777) # 设置GPU的随机种子

X = torch.FloatTensor([[0, 0], [0, 1], [1, 0], [1, 1]]).to(device) # 将X转换为FloatTensor类型,并将其转换到设备上
Y = torch.FloatTensor([[0], [1], [1], [0]]).to(device) # 将Y转换为FloatTensor类型,并将其转换到设备上

# 创建4个线性层和一个sigmoid层
linear1 = torch.nn.Linear(2, 10, bias=True) # 创建一个输入为2,输出为10,带有bias的线性层
linear2 = torch.nn.Linear(10, 10, bias=True) # 创建一个输入为10,输出为10,带有bias的线性层
linear3 = torch.nn.Linear(10, 10, bias=True) # 创建一个输入为10,输出为10,带有bias的线性层
linear4 = torch.nn.Linear(10, 1, bias=True) # 创建一个输入为10,输出为1,带有bias的线性层
sigmoid = torch.nn.Sigmoid() # 创建一个sigmoid层

# 创建一个模型,将linear1、sigmoid、linear2、sigmoid、linear3、sigmoid、linear4、sigmoid按顺序排列,并将模型移动到device设备上
model = torch.nn.Sequential(linear1, sigmoid, linear2, sigmoid, linear3, sigmoid, linear4, sigmoid).to(device)

criterion = torch.nn.BCELoss().to(device)# 定义了一个BCELoss损失函数,并将其移动到device(如GPU)上。
# BCELoss(Binary Cross Entropy Loss)是一种二分类损失函数,用于计算预测值与真实值之间的差异。它可以用来衡量预测值与真实值之间的差距,以便模型可以更好地拟合数据。BCELoss的公式如下:
# Loss = -(y * log(p) + (1 - y) * log(1 - p))
# 其中,y表示真实值,p表示预测值。
optimizer = torch.optim.SGD(model.parameters(), lr=1)  # 定义优化器,使用随机梯度下降,学习率为1

for step in range(10001): # 循环10001次
    optimizer.zero_grad() # 将梯度置零
    hypothesis = model(X) # 将X输入模型,得到预测值hypothesis
    cost = criterion(hypothesis, Y) # 计算损失函数
    cost.backward() # 反向传播
    optimizer.step() # 更新参数
    if step % 100 == 0: # 每100次输出一次step和cost
        print(step, cost.item())

# 使用torch.no_grad(),表示在计算过程中不需要计算梯度,即不需要反向传播
with torch.no_grad():
    # 将模型model的输入X进行预测,并将预测结果大于0.5的设置为1,小于0.5的设置为0
    predicted = (model(X) > 0.5).float()
    # 计算预测结果和真实结果Y的准确率,float()表示将tensor转换为float类型,mean()表示求均值
    accuracy = (predicted == Y).float().mean()
    # 打印出模型的预测结果、真实结果和准确率
    print('\nHypothesis: ', hypothesis.detach().cpu().numpy(), '\nCorrect: ', predicted.detach().cpu().numpy(), '\nAccuracy: ', accuracy.item())
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值