当前位置: 首页 > wzjs >正文

博彩网站娱乐建设网站如何宣传推广

博彩网站娱乐建设,网站如何宣传推广,网页界面设计方法,电脑怎么创建网站吗文章目录 动机思路代码生成数据集的代码(c)数据集生成结果pytorch dataset 文件模型设计其他一些杂七杂八的代码训练函数训练过程代码测试过程代码 最终结果 动机 因为看到文献说神经网络(这里指多层线性层 激活函数)能够实现非线性的运算从而比简单的…

文章目录

  • 动机
  • 思路
  • 代码
    • 生成数据集的代码(c++)
    • 数据集生成结果
    • pytorch dataset 文件
    • 模型设计
    • 其他一些杂七杂八的代码
      • 训练函数
      • 训练过程代码
      • 测试过程代码
  • 最终结果

动机

因为看到文献说神经网络(这里指多层线性层 + 激活函数)能够实现非线性的运算从而比简单的单层输入加单层输出网络全面,虽然在脑海中能有大致的拟合思路。
将输入的两个数通过隐含层进行拆分二进制,从而进行异或操作,但是实践出真知,因此打算自己来写一下试一下。

思路

  1. 一开始,我的模型设计就是输入两个数字的输入层,一个隐藏层,在一个输出异或结果的输出层,具体如下(Linear(2,32),Relu,Linear(32,32),Relu,Linear(32,1))但是经过实际运行,效果超级不好。
  2. 原因细想一下很简单,因为异或操作的本质是位运算,我这样子设计网络的原因比较粗暴,我希望神经网络在输入层的时候将两个数都拆解成16位的二进制数,然后在隐藏层实现异或操作,最后在输出层输出异或结果,但是太理想化,没有良好的loss函数约束,神经网络很难学到这样子复杂的位运算操作。(因为这里我图省事直接用了mse的loss,神经网络很难通过两个数之间的差值来理解位运算。
  3. 后来我就想明白了,我直接把输入的两个数直接拆解成了16 + 16 位的二进制数,网络重新设计成了(Linear(32,64),Relu,Linear(64,64),Relu,Linear(64,16),Sigmoid)。同时损失函数我使用了Bce来进行约束,这样任务实际上就变成了用两个数的二进制表示来预测他们的异或结果的二进制表示,并且使用Bce可以正确的指导神经网络来拟合异或操作。结果也很好,代码如下。

代码

生成数据集的代码(c++)

代码图省事乱写的,能用就行。得到生成的数据集文件train.txt,val.txt,test.txt

#include "bits/stdc++.h"using namespace std;map<pair<int, int>, bool> m;int main() {//写入文件string train_file = "train.txt";string val_file = "val.txt";string test_file = "test.txt";int train_num = 40000;int val_num = 10000;int test_num = 10000;//生成训练集 随机两个数的异或freopen(train_file.c_str(), "w", stdout);srand(time(0));for (int i = 0; i < train_num; i += 1) {//随机生成1 - 30000 之间的两个数int a = rand() % 30000 + 1;int b = rand() % 30000 + 1;pair<int, int> p = make_pair(a, b);if (m[p]) {i--;continue;}cout << a << " " << b << " " << (a ^ b) << endl;}//生成验证集freopen(val_file.c_str(), "w", stdout);srand(time(0));for (int i = 0; i < val_num; i += 1) {//随机生成1 - 30000 之间的两个数int a = rand() % 30000 + 1;int b = rand() % 30000 + 1;pair<int, int> p = make_pair(a, b);if (m[p]) {i--;continue;}cout << a << " " << b << " " << (a ^ b) << endl;}//生成测试集freopen(test_file.c_str(), "w", stdout);srand(time(0));for (int i = 0; i < test_num; i += 1) {//随机生成1 - 30000 之间的两个数int a = rand() % 30000 + 1;int b = rand() % 30000 + 1;pair<int, int> p = make_pair(a, b);if (m[p]) {i--;continue;}cout << a << " " << b << " " << (a ^ b) << endl;}return 0;
}

数据集生成结果

在这里插入图片描述

pytorch dataset 文件

也很简单,就是读入一下转成二进制的数组表示就ok了

import torch
from torch.utils.data import Datasetclass xor(Dataset):def __init__(self, split='train',bit_dim=16):self.data = []with open(f'./dataset_file/xor/{split}.txt', 'r') as f:for line in f:# 假设数据格式为 a,b,cparts = line.strip().split(' ')a = float(parts[0])b = float(parts[1])c = float(parts[2])# 将数据转换为bit_dim位二进制a = [int(x) for x in bin(int(a))[2:]]b = [int(x) for x in bin(int(b))[2:]]c = [int(x) for x in bin(int(c))[2:]]while len(a) < bit_dim:a = [0] + awhile len(b) < bit_dim:b = [0] + bwhile len(c) < bit_dim:c = [0] + cx = a + bself.data.append((x, c))def __len__(self):return len(self.data)def __getitem__(self, idx):x, c = self.data[idx]return torch.tensor(x), torch.tensor(c)

模型设计

这里为什么要把隐藏层的层数设为64呢
具体的可以看这篇 多层感知机是如何解决异或问题的? - 鸽我哥哥的回答 - 知乎
https://www.zhihu.com/question/263676843/answer/1549135982

按照上面这个回答的原理,对于两个1位的异或问题,需要2维度的隐含层,那么对于我们这个问题而言,就相当于是两个16位的异或问题,至少需要32维度的隐含层,但是经过我的实际测试,在隐含层维度位32维的时候,能预测,但是预测的不准,通过增加隐含层的维度后,效果显著提升(至少升到40维)。因此为了凑2进制的数,我把隐含层的维度设计成了64维,其实在网上加也一样,因为到后来神经网络已经完全拟合了异或的操作,训练集,验证集,测试集全对了。

import torch
import torch.nn as nnclass xorModel(nn.Module):def __init__(self):super(xorModel, self).__init__()self.fc1 = nn.Linear(32, 64)self.xor = nn.Linear(64, 64)self.output = nn.Linear(64, 16)self.relu = nn.LeakyReLU()self.sigmoid = nn.Sigmoid()# self.output = nn.Linear(16, 1)def forward(self, x):x = x.flatten(start_dim=1)x = self.fc1(x)x = self.relu(x)x = self.xor(x)x = self.relu(x)x = self.output(x)x = self.sigmoid(x)return x

其他一些杂七杂八的代码

训练函数

def train_model(model, train_loader, val_loader, epochs=50, lr=0.01):# criterion = nn.MSELoss()  # 推荐的损失函数criterion = nn.BCELoss()  # 推荐的损失函数optimizer = torch.optim.Adam(model.parameters(), lr=lr)for epoch in range(epochs):model.train()epoch_loss = 0.0for inputs, targets in train_loader:#将inputs和targets变成inputs, targets = inputs.to(device).float(), targets.to(device).float()optimizer.zero_grad()outputs = model(inputs)loss = criterion(outputs.squeeze(), targets)loss.backward()optimizer.step()epoch_loss += loss.item()epoch_loss /= len(train_loader)print(f"[train] Epoch {epoch + 1}/{epochs}, Loss: {epoch_loss:.7f}")model.eval()val_loss = 0.0with torch.no_grad():for inputs, targets in val_loader:inputs, targets = inputs.to(device).float(), targets.to(device).float()outputs = model(inputs)loss = criterion(outputs.squeeze(), targets)val_loss += loss.item()val_loss /= len(val_loader)print(f"[val] Epoch {epoch + 1}/{epochs}, Loss: {val_loss:.7f}")print("Finished Training")

训练过程代码

train_data = xor('train')
val_data = xor('val')train_loader = DataLoader(train_data, batch_size=256, shuffle=True)
val_loader = DataLoader(val_data, batch_size=256, shuffle=False)model = xorModel()
model.to(device)train_model(model, train_loader, val_loader, epochs=100, lr=0.01)

测试过程代码

# 测试模型
test_data = xor('test')
test_loader = DataLoader(test_data, batch_size=256, shuffle=False)model.eval()
correct = 0
total = 0
with torch.no_grad():for inputs, targets in test_loader:inputs, targets = inputs.to(device).float(), targets.to(device).float()outputs = model(inputs)predicted = (outputs > 0.5).float()correct_bits = (predicted == targets)correct_samples = correct_bits.all(dim=1).sum().item()  # 按列检查是否所有位都正确correct += correct_samplestotal += targets.size(0)# print(f"Predicted: {predicted}, Ground Truth: {targets}")print(f"Accuracy: {correct / total * 100:.4f} %")

最终结果

从80个epoch开始就已经完全拟合了。
在这里插入图片描述
最后的测试集准确率也100%
在这里插入图片描述

这样一个小小的实现两个16位二进制数的异或操作神经网络就完成啦

http://www.dtcms.com/wzjs/351411.html

相关文章:

  • 网站开发需要提供哪些资料专业郑州企业网站建设
  • 网站建设差打不开付费推广方式有哪些
  • 成都html5网站建设湖南网站推广
  • web网站开发用到哪些语言企业网站建设目标
  • wordpress分类目录路径吉林网站seo
  • 网站平台搭建包括哪些新媒体代运营
  • 做网站用angular知乎关键词排名优化工具
  • 番禺区网站设计创意营销策划方案
  • 找兼职做酒店网站网站排名优化专业定制
  • 三五做网站互联网推广平台
  • dede中英文网站宣传广告
  • 贵阳做网站需要多少钱上海今天最新发布会
  • 做网站时为什么导航时两行字深圳最新通告今天
  • WordPress写文章乱码石家庄seo关键词
  • 香洲网站建设推广赚钱平台有哪些
  • 网站建站卖首饰侵权百度提升优化
  • 馀姚网站建设360排名检测
  • 做宣传的网站有哪些微信引流获客软件
  • s什么网站可以接单做设计赚钱网络软文发布
  • 网站自适应布局免费下载app并安装
  • 重庆竣工验收备案网上查询seo教程优化
  • 做网站引流宁德市人民医院
  • 建设门户网站多少钱免费b2b网站大全免费
  • 做网站建设公司赚钱吗网站模板建站公司
  • 网站建设维护是啥意思淘宝seo
  • 广州网站seo推广百度超级链数字藏品
  • wordpress变为中文漯河seo推广
  • 嘉兴做网站优化价格商务软文写作300字
  • 求个网站你懂我意思是四平网站seo
  • 哪里做网站的小红书seo排名优化