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

用循环神经网络生成0^n 1^n形式的简单序列

题目详细如下:

微信图片_20251211231041_46_13

源代码
import torch
import torch.nn as nn
import torch.optim as optim
import random#数据准备与预处理
def generate_data(num_samples, max_n=5):data = []for _ in range(num_samples):n = random.randint(1, max_n)seq = '0' * n + '1' * n data.append(seq)return datadef encode_seq(seq, max_len):encoded = [0 if c == '0' else 1 for c in seq]padded = encoded + [2] * (max_len - len(encoded))  #2为填充符return torch.tensor(padded, dtype=torch.long)max_n = 5
max_seq_len = 2 * max_n
train_data = generate_data(1000, max_n)#定义LSTM模型
class SeqGenerate(nn.Module):def __init__(self, vocab_size=3, embed_dim=8, hidden_dim=16):super().__init__()self.embedding = nn.Embedding(vocab_size, embed_dim)self.lstm = nn.LSTM(embed_dim, hidden_dim, batch_first=True)self.fc = nn.Linear(hidden_dim, vocab_size)def forward(self, x, hidden=None):# x形状:(batch_size, seq_len)x = self.embedding(x)x, hidden = self.lstm(x, hidden)logits = self.fc(x)return logits, hidden#训练模型
model = SeqGenerate()
criterion = nn.CrossEntropyLoss(ignore_index=2)
optimizer = optim.Adam(model.parameters(), lr=0.001)
#训练循环
epochs = 50
batch_size = 32
for epoch in range(epochs):total_loss = 0random.shuffle(train_data)for i in range(0, len(train_data), batch_size):batch = train_data[i: (i+batch_size)]inputs = [encode_seq(seq[:-1], max_seq_len-1) for seq in batch]labels = [encode_seq(seq[1:], max_seq_len-1) for seq in batch]inputs = torch.stack(inputs)labels = torch.stack(labels)optimizer.zero_grad()logits, _ = model(inputs)loss = criterion(logits.reshape(-1, 3), labels.reshape(-1))loss.backward()optimizer.step()total_loss += loss.item()if (epoch + 1) % 10 == 0:print(f"Epoch {epoch+1}, Loss:{total_loss / len(train_data):.4f}")#生成 0n 1n序列
def generate_seq(model, start_char='0', target_n=3):model.eval()seq = [start_char]hidden = Nonefor _ in range(target_n - 1):input_tensor = torch.tensor([[0]], dtype=torch.long)logits, hidden = model(input_tensor, hidden)next_char = torch.argmax(logits, dim=-1).item()seq.append('0' if next_char == 0 else '1')for _ in range(target_n):nput_tensor = torch.tensor([[1]], dtype=torch.long)logits, hidden = model(input_tensor, hidden)next_char = torch.argmax(logits, dim=-1).item()seq.append('0' if next_char == 0 else '1')return ''.join(seq)generate_seq = generate_seq(model, target_n=3)
print(f"生成的0^n 1^n序列:{generate_seq}")

输出结果:

屏幕截图 2025-12-11 230755

http://www.jsqmd.com/news/73195/

相关文章:

  • AcWing 846:树的重心 ← 链式前向星 or 邻接表
  • PyMe是一款面向大众的可视化低代码Python开发工具
  • 251211
  • 2025最新广州创业瑜伽培训中心TOP5评测!优质瑜伽馆年度盘点,专业传承+实战赋能权威榜单发布,引领都市身心疗愈新生态 - 全局中转站
  • Python自然语言处理的未来:技术栈与开发范式
  • AI元人文构想:技术标准与人文规范的统一——拥抱数值表征vs审慎价值优化
  • Ubuntu系统火狐浏览器配置http代理
  • 1-Year XTOOL D9S PRO Update: Latest Diagnostics for European/American Mechanics Car Owners
  • 2025年目前有名的门窗源头厂家口碑推荐,复古门窗/中式门窗/整体门窗/极简门窗/高端定制门窗/智能门窗/门窗品牌有哪些 - 品牌推荐师
  • 2025年苏州GEO排名产品TOP10,本地企业表现亮眼,企业短视频矩阵/ai排行榜/GEO排名/短视频矩阵/视频矩阵GEO排名厂商排行榜 - 品牌推荐师
  • 2025年12月上海简约装修,上海中古风装修,上海工业风装修公司推荐,高颜值与实用性兼具的优质品牌 - 品牌鉴赏师
  • 2025年12月上海简约装修,上海中古风装修,上海工业风装修公司推荐,高颜值与实用性兼具的优质品牌 - 品牌鉴赏师
  • 关于公司经营场所和股东变更的公告 - 指南
  • 观察者模式
  • 2025年东莞优质的铝门窗批发选哪家,安全门窗/铝门窗/慕莎尼奥门窗/窗纱一体铝门窗/门窗/铝门窗品牌选哪家 - 品牌推荐师
  • 2025年市面上排行前列的推拉窗厂家有哪些,侧压平移推拉窗/六轨断桥推拉窗/平移断桥提升窗/推拉窗源头厂家推荐排行榜 - 品牌推荐师
  • 详细介绍:Chrome HSTS(HTTP Strict Transport Security)
  • tmux使用教程
  • 2025年12月上海别墅装修,上海极简风装修,上海新中式装修公司权威推荐,设计实力与市场口碑深度解析 - 品牌鉴赏师
  • Python 编程实战 实用工具与库 — Django 项目结构简介 - 指南
  • 2025.12.11总结
  • 2025年短视频代运营口碑前十强,专业机构推荐,短视频代运营团队/小红书代运营/短视频代运营/企业号代运营短视频代运营系统选哪家 - 品牌推荐师
  • 124_尚硅谷_闭包的基本介绍
  • One Year XTOOL D9S Update Service: Keep Diagnostics Up-to-Date for EU US Vehicles
  • 如何确定arm固件的加载地址
  • 2025年数控车床品牌新格局,机械手集成能力排行揭晓,动力刀塔数控车/牙科配件数控车床/新能源数控车床/军工配件数控机床数控车床设计怎么选择 - 品牌推荐师
  • 2025年国内靠谱的门窗源头厂家推荐,全屋门窗/环保门窗/复古门窗/极简门窗/欧式门窗/智能门窗/门窗直销厂家找哪家 - 品牌推荐师
  • 2025军工智造基石:十大数控车床厂家权威评测排行,4轴数控机床/水暖接头数控机床/机械手数控车床/液冷接头数控机床数控车床门店怎么选择 - 品牌推荐师
  • 1-Year XTOOL D9 Update: Keep Diagnostics Current for EU US Vehicles
  • <<Learning visionbased agile flight via differentiable physics>>端到端无人机高速避障方案解析 - 教程