当前位置: 首页 > 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.gsyq.cn/news/61957.html

相关文章:

  • ARCGIS Pro 绘图技巧——水文站的尖尖垂直于河流的水流方向
  • 优美的字符串
  • 【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 31 章 WIFI 实验-华为 IoTDA 设备接入 - 教程
  • OpenHarmony与ArkUI-X的跨平台开发环境搭建细节版
  • OpenHarmony与ArkUI-X的跨平台开发环境搭建速通版
  • 卷积神经网络的引入4 —— 局部扰动与空间结构破坏下的鲁棒性验证
  • Python convert class list in CSV file via pandas.dataframe
  • RabbitMQ消息分发详解:从默认轮询到智能负载均衡 - 指南
  • 11月26日
  • slkjflksjdklflsdkjfjlksdlkjfsflkjsd
  • 十一月份《代码大全》观后感
  • [KaibaMath]1026 海明码校验位数求解方法的进一步简化
  • 2025年11月【口碑好的】通讯管理机【公司】【推荐】【哪家好】
  • Redhat-9-中编译-EFS-客户端工具-即过程中-报错提示-warning: aws-lc-fips-sys@0.13.9: Building with: CMake-解决方法
  • 05app抓包
  • 实用指南:基于 ComfyUI 的 Stable Diffusion 本地部署与使用教程
  • 2025年设计师与程序员专属:高级感简历模板 TOP5 排行榜
  • 什么是Go语言
  • 人工智能之数据分析 Matplotlib:第一章 简介和安装
  • feature map是什么
  • 重磅!图灵奖得主 Bengio 领衔 30 + 顶流学者联合发文!首次给 AGI 下量化定义
  • 零代码,分钟级定制:我用LLaMA-Factory轻松造了个“票务专家”AI
  • StackOverflow已经死亡了吗
  • 2025AI培训权威排名:AI时代新商学引领行业变革
  • Manim进阶:用背景图片让你的数学视频脱颖而出
  • 2025 AI 培训机构权威推荐榜排名揭晓:AI时代新商学引领行业破局之路
  • Lab4AI与国内顶会展开合作!一键体验 CVPR/ICCV/NeurIPS 顶会论文复现
  • SIGIR会议聚焦包容性AI与多语言技术
  • 详细介绍:VS Code 新旧版本 Remote-SSH 内网离线连接服务器方法(版本 ≤ 1.78.x 及 ≥ 1.79.0)
  • 44(11.24)