Datawhale AI夏令营第三期·AI+化学task3:Transformer建模SMILES进行反应产率预测

一、跑通baseline

1.云服务器选择

图1-1:Tesla V100 32GB显卡

使用了AutoDL的云服务器,选型Tesla V100 32GB版本运行baseline,显卡性能强劲,可以很快完成任务。

2.运行过程的小bug

图1-2:出现bug的代码片段

改正方案是:先后顺序替换一下就可以了。

3.运行结果

  • 训练时长:24.05min
  • 分数:0.1368

二、部分代码分析

# 模型
'''
直接采用一个transformer encoder model就好了
'''
class TransformerEncoderModel(nn.Module):
    def __init__(self, input_dim, d_model, num_heads, fnn_dim, num_layers, dropout):
        super().__init__()
        self.embedding = nn.Embedding(input_dim, d_model)
        self.layerNorm = nn.LayerNorm(d_model)
        self.encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, 
                                                        nhead=num_heads, 
                                                        dim_feedforward=fnn_dim,
                                                        dropout=dropout,
                                                        batch_first=True,
                                                        norm_first=True # pre-layernorm
                                                        )
        self.transformer_encoder = nn.TransformerEncoder(self.encoder_layer, 
                                                         num_layers=num_layers,
                                                         norm=self.layerNorm)
        self.dropout = nn.Dropout(dropout)
        self.lc = nn.Sequential(nn.Linear(d_model, 256),
                                nn.Sigmoid(),
                                nn.Linear(256, 96),
                                nn.Sigmoid(),
                                nn.Linear(96, 1))

    def forward(self, src):
        # src shape: [batch_size, src_len]
        embedded = self.dropout(self.embedding(src))
        # embedded shape: [batch_size, src_len, d_model]
        outputs = self.transformer_encoder(embedded)
        # outputs shape: [batch_size, src_len, d_model]

        # fisrt
        z = outputs[:,0,:]
        # z = torch.sum(outputs, dim=1)
        # print(z)
        # z shape: [bs, d_model]
        outputs = self.lc(z)
        # print(outputs)
        # outputs shape: [bs, 1]
        return outputs.squeeze(-1)

图2-1:transformer encoder model

这段代码定义了一个基于 Transformer 编码器的模型 TransformerEncoderModel。模型的目的是处理输入序列并生成一个输出。下面是对代码的详细解析:

### 类定义
class TransformerEncoderModel(nn.Module):
    def __init__(self, input_dim, d_model, num_heads, fnn_dim, num_layers, dropout):
        super().__init__()


TransformerEncoderModel 继承自 nn.Module,这是所有 PyTorch 神经网络模块的基类。构造函数接受多个参数来初始化模型。

初始化参数

  • input_dim: 输入的词汇表大小。
  • d_model: 嵌入维度(Transformer 模型的隐藏大小)。
  • num_heads: 多头注意力机制的头数。
  • fnn_dim: 前馈神经网络(Feedforward Neural Network, FNN)的隐藏层大小。
  • num_layers: Transformer 编码器层的数量。
  • dropout: dropout 率,用于防止过拟合。

综述


这个模型使用 Transformer 编码器对输入序列进行编码,并通过全连接层将编码结果映射到单个输出值。模型可以用于序列分类、回归或其他需要单值输出的任务。


最后,感谢Datawhale提供这个学习交流机会,以及启智社区的免费算力支持!!!😊😊😊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值