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

上下文无关文法序列

import torch
import torch.nn as nn
import torch.optim as optim
import numpy as np

def generate_data(num_samples):
data = []
for _ in range(num_samples):
n = 30 # 固定n为30
seq = [0]n + [1]n
data.append(seq)
return data

def preprocess_data(data, max_len):
padded = [seq + [2]*(max_len - len(seq)) for seq in data]
return torch.tensor(padded, dtype=torch.long)

class RNNGenerator(nn.Module):
def init(self, vocab_size, hidden_size, num_layers):
super().init()
self.embedding = nn.Embedding(vocab_size, hidden_size)
self.rnn = nn.LSTM(hidden_size, hidden_size, num_layers, batch_first=True)
self.fc = nn.Linear(hidden_size, vocab_size)

def forward(self, x, hidden=None):x = self.embedding(x)out, hidden = self.rnn(x, hidden)out = self.fc(out)return out, hidden

vocab_size = 3
hidden_size = 64 # 增大隐藏层适配长序列
num_layers = 2 # 增加层数提升建模能力
max_len = 60 # 030+130总长度60
model = RNNGenerator(vocab_size, hidden_size, num_layers)
criterion = nn.CrossEntropyLoss(ignore_index=2)
optimizer = optim.Adam(model.parameters(), lr=0.001)

data = generate_data(500) # 生成500条训练样本
padded_data = preprocess_data(data, max_len)

for epoch in range(200): # 增加训练轮数
model.train()
optimizer.zero_grad()
x = padded_data[:, :-1]
y = padded_data[:, 1:]
out, _ = model(x)
loss = criterion(out.reshape(-1, vocab_size), y.reshape(-1))
loss.backward()
optimizer.step()
if (epoch+1) % 20 == 0:
print(f"Epoch {epoch+1}, Loss: {loss.item():.4f}")

model.eval()
with torch.no_grad():
start = torch.tensor([[0]], dtype=torch.long)
hidden = None
seq = [0]
for _ in range(59): # 生成后续59个字符(总长度60)
out, hidden = model(start, hidden)
pred = out.argmax(dim=-1).item()
seq.append(pred)
start = torch.tensor([[pred]], dtype=torch.long)
print("生成的030130序列:", seq)

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

相关文章:

  • 生产事故救火指南:Kafka 消息积压了怎么办?如何保证数据一条不丢?
  • ARCGIS Pro 绘图技巧——水文站的尖尖垂直于河流的水流方向
  • 优美的字符串
  • 【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 31 章 WIFI 实验-华为 IoTDA 设备接入 - 教程
  • 2025年11月不锈钢砝码,铸铁砝码,定制砝码厂家推荐,实力品牌深度解析采购无忧之选!
  • OpenHarmony与ArkUI-X的跨平台开发环境搭建细节版
  • 五分钟教你学会MarkDown语法 - echo
  • Linux命令行与Shell脚本编程大全笔记
  • OpenHarmony与ArkUI-X的跨平台开发环境搭建速通版
  • 卷积神经网络的引入4 —— 局部扰动与空间结构破坏下的鲁棒性验证
  • qoj 2610 题解
  • P4158 [SCOI2009] 粉刷匠
  • Temperature、Top P 的原理以及两者区别
  • Python convert class list in CSV file via pandas.dataframe
  • Google 新出的 Antigravity 有哪些新特性?
  • RabbitMQ消息分发详解:从默认轮询到智能负载均衡 - 指南
  • 宇树 Qmini 双足机器人训练个人经验总结
  • 11月26日
  • slkjflksjdklflsdkjfjlksdlkjfsflkjsd
  • 实用指南:文档搜索引擎搜索模块:从需求拆解到落地的全流程实现指南
  • AI元人文实践:家庭旅游规划
  • 十一月份《代码大全》观后感
  • [KaibaMath]1026 海明码校验位数求解方法的进一步简化
  • 畅通工程 小记
  • 畅通工程 小记
  • 一篇文章详解Kafka Broker - 教程
  • 一篇文章详解Kafka Broker - 教程
  • Redhat-9-中编译-EFS-客户端工具-即过程中-报错提示-warning: aws-lc-fips-sys@0.13.9: Building with: CMake-解决方法
  • 2025年11月【口碑好的】通讯管理机【公司】【推荐】【哪家好】
  • 05app抓包