FTTransformer,一个很能打的模型

FTTransformer:让Transformer在表格数据上也能‘拳拳到肉’ 本文深入探讨了FTTransformer模型如何将Transformer架构成功应用于表格数据,通过特征令牌化等创新设计,解决了传统方法在处理复杂特征交互时的局限性。文章详细介绍了FTTransformer的核心思想、架构调整及实战应用,展示了其在植被覆盖预测等任务中超越LightGBM的性能表现,为表格数据分析提供了新的深度学习解决方案。 阅读详情
AI摘要

本文介绍FTTransformer模型,一种适用于结构化数据的Transformer变体,实现在Covertype数据集上分类准确率达到91%,优于LightGBM的83%。通过详细步骤展示数据预处理、模型定义、训练、评估及保存。

FTTransformer,是一个BERT模型架构在结构化数据集上的迁移变体。和BERT一样,它非常能打。

它可能是少数能够在大多数结构化数据集上取得超过或者匹配LightGBM结果的深度模型。

本范例我们将应用它在来对Covertype植被覆盖数据集进行一个多分类任务。

我们在测试集取得了91%的准确率,相比之下LightGBM只有83%的准确率。

公众号算法美食屋后台回复关键词:torchkeras,获取本文notebook源码和所用Covertype数据集下载链接。

〇,原理讲解

FTTransformer是一个可以用于结构化(tabular)数据的分类和回归任务的模型。

FT 即 Feature Tokenizer的意思,把结构化数据中的离散特征和连续特征都像单词一样编码成一个向量。

从而可以像对text数据那样 应用 Transformer对 Tabular数据进行特征抽取。

值得注意的是,它对Transformer作了一些微妙的改动以适应 Tabular数据。

例如:去除第一个Transformer输入的LayerNorm层,仿照BERT的设计增加了output token(CLS token) 与features token 一起进行进入Transformer参与注意力计算。

一,准备数据

import numpy as np 
import pandas as pd 
from sklearn.model_selection import train_test_split


file_path = "covertype.parquet"
dfdata = pd.read_parquet(file_path)
...


dftmp, dftest_raw = train_test_split(dfdata, random_state=42, test_size=0.2)
dftrain_raw, dfval_raw = train_test_split(dftmp, random_state=42, test_size=0.2)


print("len(dftrain) = ",len(dftrain_raw))
print("len(dfval) = ",len(dfval_raw))
print("len(dftest) = ",len(dftest_raw))
dfdata.shape =  (581012, 13)
target_col =  Cover_Type
cat_cols =  ['Wilderness_Area', 'Soil_Type']
num_cols =  ['Elevation', 'Aspect', 'Slope', '...']
len(dftrain) =  371847
len(dfval) =  92962
len(dftest) =  116203
from torchkeras.tabular import TabularPreprocessor
from sklearn.preprocessing import OrdinalEncoder


#特征工程
...


dftest = pipe.transform(dftest_raw.drop(target_col,axis=1))
dftest[target_col] = encoder.transform(
    dftest_raw[target_col].values.reshape(-1,1)).astype(np.int32)
from torchkeras.tabular import TabularDataset
from torch.utils.data import Dataset,DataLoader 


def get_dataset(dfdata):
    return TabularDataset(
                data = dfdata,
                task = 'classification',
                target = [target_col],
                continuous_cols = pipe.get_numeric_features(),
                categorical_cols = pipe.get_embedding_features()
        )


def get_dataloader(ds,batch_size=1024,num_workers=0,shuffle=False):
    dl = DataLoader(
            ds,
            batch_size=batch_size,
            shuffle=shuffle,
            num_workers=num_workers,
            pin_memory=False,
        )
    return dl 
    
ds_train = get_dataset(dftrain)
ds_val = get_dataset(dfval)
ds_test = get_dataset(dftest)


dl_train = get_dataloader(ds_train,shuffle=True)
dl_val = get_dataloader(ds_val,shuffle=False)
dl_test = get_dataloader(ds_test,shuffle=False)
for batch in dl_train:
    break

二,定义模型

from torchkeras.tabular.models import FTTransformerConfig,FTTransformerModel


model_config = FTTransformerConfig(
    task="classification",
    num_attn_blocks=3
)


config = model_config.merge_dataset_config(ds_train)
net = FTTransformerModel(config = config)


#初始化参数
net.reset_weights()
net.data_aware_initialization(dl_train)


print(net.backbone.output_dim)
print(net.hparams.output_dim)

三,训练模型

from torchkeras import KerasModel 
from torchkeras.tabular import StepRunner 
KerasModel.StepRunner = StepRunner
import torch 
from torch import nn 
class Accuracy(nn.Module):
    def __init__(self):
        super().__init__()


        self.correct = nn.Parameter(torch.tensor(0.0),requires_grad=False)
        self.total = nn.Parameter(torch.tensor(0.0),requires_grad=False)


    def forward(self, preds: torch.Tensor, targets: torch.Tensor):
        preds = preds.argmax(dim=-1)
        targets = targets.reshape(-1)
        m = (preds == targets).sum()
        n = targets.shape[0] 
        self.correct += m 
        self.total += n
        
        return m/n


    def compute(self):
        return self.correct.float() / self.total 
    
    def reset(self):
        self.correct -= self.correct
        self.total -= self.total
keras_model = KerasModel(net,
                   loss_fn=None,
                   optimizer = torch.optim.AdamW(net.parameters(),lr = 1e-3),
                   metrics_dict = {"acc":Accuracy()}
                   )
keras_model.fit(
    train_data = dl_train,
    val_data= dl_val,
    ckpt_path='checkpoint',
    epochs=20,
    patience=10,
    monitor="val_acc", 
    mode="max",
    plot = True,
    wandb = False
)

e12eab2822f1a30f4c356b0086c24504.png

四,评估模型

keras_model.evaluate(dl_val)
{'val_loss': 0.22164690216164012, 'val_acc': 0.9103181958198547}
keras_model.evaluate(dl_test)
{'val_loss': 0.22033428426897317, 'val_acc': 0.9109489321708679}

五,使用模型

from tqdm import tqdm 
net = net.cpu()
net.eval()
preds = []
with torch.no_grad():
    for batch in tqdm(dl_test):
        preds.append(net.predict(batch))
yhat_list = [yd.argmax(dim=-1).tolist() for yd in preds]
yhat = []
for yd in yhat_list:
    yhat.extend(yd)
yhat = encoder.inverse_transform(np.array(yhat).reshape(-1,1))
dftest_raw = dftest_raw.rename(columns = {target_col: 'y'})
dftest_raw['yhat'] = yhat
from sklearn.metrics import classification_report
print(classification_report(y_true = dftest_raw['y'],y_pred = dftest_raw['yhat']))
precision    recall  f1-score   support

           1       0.90      0.91      0.91     42557
           2       0.92      0.92      0.92     56500
           3       0.92      0.90      0.91      7121
           4       0.85      0.82      0.83       526
           5       0.78      0.75      0.77      1995
           6       0.84      0.82      0.83      3489
           7       0.92      0.91      0.91      4015

    accuracy                           0.91    116203
   macro avg       0.88      0.86      0.87    116203
weighted avg       0.91      0.91      0.91    116203
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix




# 计算混淆矩阵
cm = confusion_matrix(dftest_raw['y'], dftest_raw['yhat'])


# 将混淆矩阵转换为DataFrame
df_cm = pd.DataFrame(cm, index=['Actual {}'.format(i) for i in range(cm.shape[0])],
                     columns=['Predicted {}'.format(i) for i in range(cm.shape[1])])


# 使用seaborn绘制混淆矩阵
plt.figure(figsize=(10,7))
sns.heatmap(df_cm, annot=True, fmt='d', cmap='Blues', cbar=False)
plt.title('Confusion Matrix')
plt.xlabel('Predicted labels')
plt.ylabel('True labels')
plt.show()

5b7bae7113e44c9b7ab6efd4eed5e6aa.png

六,保存模型

最佳模型权重已经保存在ckpt_path = 'checkpoint'位置了。

net.load_state_dict(torch.load('checkpoint'))

七,与LightGBM对比

import pandas as pd 
import lightgbm as lgb
from sklearn.preprocessing import OrdinalEncoder
from sklearn.metrics import accuracy_score 


dftmp, dftest_raw = train_test_split(dfdata, random_state=42, test_size=0.2)
dftrain_raw, dfval_raw = train_test_split(dftmp, random_state=42, test_size=0.2)


dftrain = dftrain_raw.copy()
dfval = dfval_raw.copy()
dftest = dftest_raw.copy()


target_col = 'Cover_Type'
cat_cols = ['Wilderness_Area', 'Soil_Type']


encoder = OrdinalEncoder()


dftrain[target_col] = encoder.fit_transform(dftrain[target_col].values.reshape(-1,1)) 
dfval[target_col] = encoder.transform(dfval[target_col].values.reshape(-1,1))
dftest[target_col] = encoder.transform(dftest[target_col].values.reshape(-1,1))


for col in cat_cols:
    dftrain[col] = dftrain[col].astype(int)
    dfval[col] = dfval[col].astype(int)
    dftest[col] = dftest[col].astype(int)


ds_train = lgb.Dataset(dftrain.drop(columns=[target_col]), label=dftrain[target_col],categorical_feature=cat_cols)
ds_val = lgb.Dataset(dfval.drop(columns=[target_col]), label=dfval[target_col],categorical_feature=cat_cols)
ds_test = lgb.Dataset(dftest.drop(columns=[target_col]), label=dftest[target_col],categorical_feature=cat_cols)




import lightgbm as lgb


params = {
    'n_estimators':500,
    'boosting_type': 'gbdt',
    'objective':'multiclass',
    'num_class': 7,  # 类别数量
    'metric': 'multi_logloss', 
    'learning_rate': 0.01,
    'verbose': 1,
    'early_stopping_round':50
}
model = lgb.train(params, ds_train, 
        valid_sets=[ds_val], 
        valid_names=['validate']
        )


y_pred_val = model.predict(dfval.drop(target_col,axis = 1), num_iteration=model.best_iteration)
y_pred_val = np.argmax(y_pred_val, axis=1)


y_pred_test = model.predict(dftest.drop(target_col,axis = 1), num_iteration=model.best_iteration)
y_pred_test = np.argmax(y_pred_test, axis=1)


val_score = accuracy_score(dfval[target_col], y_pred_val)
test_score = accuracy_score(dftest[target_col], y_pred_test) 


print('val_score = ',val_score)
print('test_score = ' , test_score)
val_score =  0.8321464684494739
test_score =  0.8329389086340284

公众号算法美食屋后台回复关键词:torchkeras,获取本文notebook源码和更多有趣范例。

5d60346ee03cf89d0202eb2b8f477145.png

fb972353b35008610686024e8a6163d0.png

f69f8e559906511f1514627edee6675a.png

de4e1ccb4d3db90ce5041038c14c7014.png

2024表格数据深度学习模型综述 论文地址:https://arxiv.org/abs/2410.12034表格数据在医疗、金融和交通等行业广泛使用,由于其异质性和缺乏空间结构,给深度学习带来了独特的挑战。本调查回顾了针对表格数据的深度学习模型的发展,从早期的全连接网络(FCNs)到先进的架构如TabNet、SAINT、TabTranSELU和MambaNet。这些模型结合了注意力机制、特征嵌入和混合架构,以应对表格数据的复杂性。 阅读详情

相关推荐

AI Studio vLoong能源AI挑战赛——异常检测赛A榜第三名方案

异常检测赛

weixin_43509698的博客 3201

基于细颗粒度注意力的层次Transformer在表格类时序中的应用

Content本文介绍了表格时间序列数据在多个实际应用中的重要性,并提出了一种名为 Fieldy 的新型细粒度层次化模型,该模型通过在行和列级别上对字段进行上下文化,以捕捉字段间的复杂关系。通过与现有最先进模型在回归和分类任务上的比较,展示了 Fieldy 在性能上的提升。顺序表格数据在工业中应用广泛,如银行数据库中的金融交易记录、医院存储的医疗记录或 CRM 系统中的客户购买历史。表格时间序列数据与传统多变量时间序列数据存在不同之处,特别是表格时间序列数据中记录跨越多行且包含时间相关字段。

python123456_的博客 1435

告别LightGBM?用PyTorch和FTTransformer在植被分类数据集上实现91%准确率

本文详细介绍了如何使用PyTorch实现FTTransformer模型,在植被分类数据集Covertype上达到91%的准确率,显著超越传统LightGBM的83%。通过特征标记化、注意力机制等创新技术,FTTransformer在表格数据处理中展现出强大优势,适用于生态学和遥感领域的植被分类任务。

weixin_30872337的博客 457

论文代码阅读及部分复现:Revisiting Deep Learning Models for Tabular Data

现有的关于表格数据做深度学习的模型层出不穷,但是作者认为,由于在真实使用模型时有着不同的基准以及实验场合,这些提出的模型没有被很好地比较。因此,论文作者在论文中对各类模型进行了综述,并且自身提出了一个对Transformer作简单改进的模型:FT-Transformer,最终将ResNet-like类模型、Transformer-like类模型以及其他MLP模型在不同的数据集上训练、对比效果,最终确定了一个较好的衡量针对表格数据的深度学习模型的标准(bennchmark)。

thorn_r的博客 3704

Lightning Flash表格分类与回归实战指南

表格数据建模是机器学习落地的核心场景,涵盖信贷评分、销售预测、故障预警等高频业务需求。其本质是将结构化CSV或DataFrame输入,经特征编码、数值标准化、类别嵌入等处理,映射为分类概率或回归数值输出。技术价值在于平衡自动化与可控性——既规避sklearn手动流水线的信息泄露风险,又摆脱PyTorch从零实现的工程冗余。Lightning Flash通过TabularDataModule、TabularClassifier和TabularRegressor三大组件,实现数据-模型-任务解耦,支持FTTra

chenzhuofei4155的博客 403

AWR射频仿真基本操作(一)

这里只讲述一个基本的操作: 软件是AWR 14版本

钢丝 2万+

【论文阅读—深度学习处理表格数据】ResNet-like & FT Transformer

论文摘要:该研究系统评估了处理表格数据的深度学习方法,指出当前模型因测试标准不一而难以比较的问题。作者提出了两个简单高效的基线模型:ResNet-like架构和改良的FT-Transformer,通过统一实验框架在11个数据集上验证其性能。实验表明,FT-Transformer综合表现最优且稳定,但传统梯度提升树(GBDT)仍具竞争力。研究还开发了基于注意力机制的特征重要性解释方法,为表格数据深度学习提供了实用基准和开源实现。

weixin_51375278的博客 1827

分析android逆向的学习路线

俗话说:“一入逆向深似海,从此头发是路人”。 安卓逆向作为当下热门行业“网络安全”的主要技术之一,已经受到了越来越多人的青睐。但是很多刚入门的新手小伙伴对于怎么去学习却还很是迷糊。本文就分享一下android逆向的学习路线供大家参考。 目前学习安卓逆向的人群大约分为两种: 第一种是完全没有任何基础的计算机纯小白; 第二种是本来就做开发懂编程的IT行业人员。 我们就针对这两个不同的人群做一下安卓逆向的学习路线分析。 一、无基础小白想入门 作为没有任何基础想要入门的计算机纯小白,学习上推荐参照以下步骤: (一

Hacker_by_V的博客 3080

TorchKeras表格数据处理:FTTransformer、TabNet等模型应用指南

TorchKeras是一个融合PyTorch灵活性与Keras易用性的深度学习工具库,特别在表格数据处理领域提供了丰富的模型支持。本文将介绍如何使用TorchKeras中的FTTransformer、TabNet等先进模型快速构建高性能表格数据分类与回归解决方案。 ## 为什么选择TorchKeras处理表格数据? 表格数据作为最常见的数据形式之一,广泛存在于金融、医疗、电商等行业。Torch

gitblog_00176的博客 860

如何使用Dify 搭建一个用自然语言查询数据库的 Agent?

这样就会发布完毕。

AI Agent 首席体验官 1699

sap2000 api matlab,SAP2000_API入门指南.pdf

SAP2000_API入门指南北 京 金 土 木 软 件 技 术 有 限 公 司Beijing Civil King Software TechnologyCo., Ltd.SAP2000 API 入门指南余承飞 韦群跃 汤娣概述SAP2000 API 是从 SAP2000 V11 开始引进的,即应用软件编程接口。用户可以编写程序,通过API 随心所欲地调用 SAP2000...

weixin_42118423的博客 1943

TabTransformer vs FTTransformer:哪个表格深度学习模型更适合你的数据?

在处理表格数据时,选择合适的深度学习模型对于提升预测性能至关重要。TabTransformer和FTTransformer作为两种领先的表格数据深度学习解决方案,各自具有独特的架构设计和适用场景。本文将深入对比这两种模型的核心差异,帮助你根据数据特征做出最佳选择。 ## 📊 核心架构对比 TabTransformer和FTTransformer在处理表格数据时采用了不同的策略,这直接影响了它

gitblog_00687的博客 463

车载以太网抓包实战:100BASE-T1/1000BASE-T1高效监控方案解析

本文深入解析了车载以太网100BASE-T1/1000BASE-T1的高效抓包监控方案。针对智能汽车开发中的故障排查与性能测试需求,详细对比了交换机镜像、TAP分流和捕获模块三大主流方案的原理、核心优势与适用场景,并提供了基于实战经验的选型指南与操作避坑要点,帮助工程师精准定位网络问题。

desk3的博客 429

解决AutoGluon中FTTransformer模型权重版本不兼容问题:从报错到完美运行

在使用AutoGluon进行表格数据建模时,许多用户都曾遇到过FTTransformer(Feature Tokenizer Transformer)模型的权重版本兼容性问题。当你尝试加载预训练权重或在不同版本间迁移模型时,可能会遇到类似`Unexpected key(s) in state_dict`或`size mismatch for layer.weight`的错误提示。本文将深入分析这些...

gitblog_00390的博客 486

ROSTCM6软件下载及语义网络分析详细操作教程(附网盘链接)

ROSTCM6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析。

m0_64336780的博客 4万+

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

【深度学习|语义分割之UNet】如何使用ResNet50 作为 U-Net 网络的骨干网络(backbone)并使用预训练的 ResNet50 模型。附代码及解读。

985小水博的摸鱼日常 3091

PyTorch Frame核心功能解析:8大特征类型与10+深度学习模型全揭秘

PyTorch Frame是一个基于PyTorch的模块化深度学习框架,专门用于处理异构表格数据。作为表格深度学习的终极解决方案,它支持8种不同的特征类型,并实现了10多个先进的深度学习模型,让表格数据建模变得更加简单高效!🚀 ## 为什么选择PyTorch Frame? 传统的表格数据建模通常依赖于梯度提升决策树(GBDT)方法,但这些方法在处理复杂特征类型(如文本、图像、时间序列)时存在

gitblog_00499的博客 353

零差云控 ZeroErr eRob 电机 CAN、CANopen、EtherCAT、ROS2 机器人开发详细教程

TwinCAT 3(Windows 控制与自动化技术)是 Beckhoff 提供的开发平台,可将任何兼容 PC 转变为实时控制系统,用于管理各种类型的工业自动化系统,如 PLC(可编程逻辑控制器)、运动控制、机器人等。

机器人控制与仿真应用 1万+

PyTorch Frame高级技巧:文本与图像特征融合的完整实现指南

PyTorch Frame是一个专为异构表格数据设计的深度学习扩展库,支持包括数值、分类、时间、文本和图像在内的多种列类型。本文将深入探讨如何使用PyTorch Frame实现文本与图像特征的融合处理,帮助您构建强大的多模态表格学习模型。😊 ## 为什么需要文本与图像特征融合? 在现代机器学习应用中,表格数据往往包含多种类型的特征。传统方法通常只能处理数值和分类特征,但现实世界的数据通常更加

gitblog_00555的博客 386

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

3分钟快速上手PyTorch Frame:构建你的第一个表格深度学习模型

PyTorch Frame是一个强大的表格深度学习库,专为PyTorch生态系统设计,帮助开发者轻松构建和训练高性能的表格数据模型。无论是处理结构化数据分类、回归任务,还是复杂的特征交互学习,PyTorch Frame都能提供简洁高效的解决方案。 ## 🚀 为什么选择PyTorch Frame? 表格数据是现实世界中最常见的数据类型之一,但传统深度学习框架在处理类别型、数值型等异构特征时往往

gitblog_00519的博客 902

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

PyTorch Frame性能优化:如何让你的表格模型训练速度提升300%

PyTorch Frame是一个基于PyTorch的表格深度学习库,专为高效处理结构化数据设计。本文将分享五个经过验证的性能优化技巧,帮助你在保持模型精度的同时,显著提升训练速度,最高可达300%的加速效果。 ## 1. 选择高效的编码器架构 ⚡ 编码器是表格模型的核心组件,选择合适的编码器可以大幅提升性能。PyTorch Frame提供了多种编码器实现,位于[torch_frame/nn/e

gitblog_01055的博客 441

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

深度解析TabTransformer:PyTorch实现的表格数据注意力网络架构

TabTransformer-PyTorch是一个基于注意力机制的表格数据处理框架,通过在多个基准测试中达到GBDT级别的性能表现,为传统表格数据分析任务带来了革命性的Transformer架构解决方案。 ## 核心架构设计原理 TabTransformer采用了创新的混合嵌入策略来处理表格数据中的分类特征和连续特征。其核心架构包含三个主要组件: **分类特征嵌入层**:通过共享嵌入机制优化

gitblog_00614的博客 1057

RTDL(研究表格深度学习)项目使用教程

RTDL,即“研究表格深度学习”,是一个专注于利用深度学习技术处理表格数据的开源库。该库源于Yandex的研究工作,它集合了相关论文和技术包,以支持在传统且复杂的表格式数据上应用先进的神经网络模型。本教程旨在帮助开发者快速理解RTDL的结构和基本使用方法。 ## 1. 项目的目录结构及介绍 RTDL的目录结构设计是模块化的,以促进易于理解和扩展。以下是其典型结构的概括,具体可能因版本更新而有所

gitblog_00909的博客 596

Lucidrains 系列项目源码解析(九十六)

【代码】Lucidrains 系列项目源码解析(九十六)

龙哥盟 1223

TabTransformer-PyTorch完全指南:如何用注意力网络革新表格数据处理

在当今数据驱动的时代,表格数据无处不在——从金融风控到医疗诊断,从电商推荐到工业预测。然而,传统的表格数据处理方法往往依赖于梯度提升决策树(GBDT)等模型,直到**TabTransformer**的出现,为表格数据建模带来了革命性的突破!🚀 ## 什么是TabTransformer?表格数据的注意力革命 TabTransformer是一种基于注意力机制的深度学习架构,专门为表格数据设计。它

gitblog_00077的博客 668

超越GBDT?TabTransformer-PyTorch在真实世界数据集上的应用案例

在表格数据建模领域,梯度提升决策树(GBDT)长期以来一直占据主导地位。然而,随着注意力机制在自然语言处理和计算机视觉领域的巨大成功,研究人员开始探索将其应用于表格数据的可能性。TabTransformer-PyTorch正是这样一个革命性的项目,它实现了基于注意力机制的表格数据建模方案,在多个真实世界数据集上展现出了与GBDT相媲美甚至超越的性能。 TabTransformer-PyTorch

gitblog_00427的博客 693
上一篇: FireCrawl,抓取网页变成Markdown
下一篇: duckdb,单机高效处理海量数据
算法美食屋
博客等级 码龄9年 2万+粉丝 154原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值