Datawhale AI夏令营”的学习笔记-siRNA药物药效预测

一、前言

个人学习笔记,这边更推荐大家看一下数据鲸 (linklearner.com)的内容在原有代码和文章的基础上,我加入了一些个人见解,此文章仅作为笔记使用

二、正文

1、Datawhale的笔记

这是Datawhale里面的笔记,已经非常详细,详细到你只要跟着做,就绝对可以做出来的程度

数据鲸 (linklearner.com)

2、siRNA详细代码 

这段代码实现了一个用于siRNA数据集的深度学习模型训练框架。

+ 法典+ 降价

1. 依赖库的导入

+ 法典+ 降价
[1]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">os</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 文件操作</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 深度学习框架</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">random</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 随机数生成</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">numpy</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>as</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">np</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 数值计算</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">pandas</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>as</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">pd</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 数据处理</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">nn</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>as</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">nn</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 神经网络模块</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">optim</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>as</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">optim</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 优化器模块</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>from</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">tqdm</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">tqdm</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 进度条显示</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>from</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">rich</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">print</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 美化打印输出</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>from</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">collections</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">Counter</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计数器工具</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>from</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">utils</span>.<span style="color:var(--jp-mirror-editor-property-color)">data</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">Dataset</span>, <span style="color:var(--jp-mirror-editor-variable-color)">DataLoader</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 数据集和数据加载器</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>from</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">sklearn</span>.<span style="color:var(--jp-mirror-editor-property-color)">model_selection</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">train_test_split</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 数据集划分</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>from</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">sklearn</span>.<span style="color:var(--jp-mirror-editor-property-color)">metrics</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>import</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">precision_score</span>, <span style="color:var(--jp-mirror-editor-variable-color)">recall_score</span>, <span style="color:var(--jp-mirror-editor-variable-color)">mean_absolute_error</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 模型评估指标</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 这些库包括了文件操作、深度学习、数据处理、模型评估等必要的工具。</em></span></span></span></span>
1秒
+ 法典+ 降价
[2]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 该函数确保了在使用NumPy、Python内置随机数生成器和PyTorch时,所有的随机数生成都是可控的和可复现的,有助于实验结果的一致性。</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">set_random_seed</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seed</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置NumPy的随机种子</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">np</span>.<span style="color:var(--jp-mirror-editor-property-color)">random</span>.<span style="color:var(--jp-mirror-editor-property-color)">seed</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seed</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置Python内置的随机数生成器的种子</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">random</span>.<span style="color:var(--jp-mirror-editor-property-color)">seed</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seed</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置PyTorch的随机种子</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">manual_seed</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seed</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置CUDA的随机种子</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">cuda</span>.<span style="color:var(--jp-mirror-editor-property-color)">manual_seed</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seed</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置所有CUDA设备的随机种子</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">cuda</span>.<span style="color:var(--jp-mirror-editor-property-color)">manual_seed_all</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seed</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 确保每次卷积算法选择都是确定的</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">backends</span>.<span style="color:var(--jp-mirror-editor-property-color)">cudnn</span>.<span style="color:var(--jp-mirror-editor-property-color)">deterministic</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>True</strong></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 关闭CuDNN自动优化功能,确保结果可复现</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">backends</span>.<span style="color:var(--jp-mirror-editor-property-color)">cudnn</span>.<span style="color:var(--jp-mirror-editor-property-color)">benchmark</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>False</strong></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
0秒
+ 法典+ 降价

2. 基因组分词器类

该类用于将基因组序列分割成固定长度的n-gram。

+ 法典+ 降价
[3]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>class</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">GenomicTokenizer</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">__init__</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">ngram</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">5</span>, <span style="color:var(--jp-mirror-editor-variable-color)">stride</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">2</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化分词器,设置n-gram长度和步幅</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">ngram</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">ngram</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">stride</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">stride</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">tokenize</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">t</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将输入序列转换为大写</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">t</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">t</span>.<span style="color:var(--jp-mirror-editor-property-color)">upper</span>()</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">ngram</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>==</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">1</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 如果n-gram长度为1,直接将序列转换为字符列表</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">toks</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">list</span>(<span style="color:var(--jp-mirror-editor-variable-color)">t</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 否则,按照步幅对序列进行n-gram分词</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">toks</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-color)">t</span>[<span style="color:var(--jp-mirror-editor-variable-color)">i</span>:<span style="color:var(--jp-mirror-editor-variable-color)">i</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span><span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">ngram</span>] <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">i</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">range</span>(<span style="color:var(--jp-mirror-editor-number-color)">0</span>, <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">t</span>), <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">stride</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">t</span>[<span style="color:var(--jp-mirror-editor-variable-color)">i</span>:<span style="color:var(--jp-mirror-editor-variable-color)">i</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span><span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">ngram</span>]) <span style="color:var(--jp-mirror-editor-operator-color)"><strong>==</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">ngram</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 如果最后一个分词长度小于n-gram,移除最后一个分词</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">toks</span>[<span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>]) <span style="color:var(--jp-mirror-editor-operator-color)"><strong><</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">ngram</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">toks</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">toks</span>[:<span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 返回分词结果</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">toks</span></span></span></span>
0秒
+ 法典+ 降价

代码解读

  1. 类初始化: 方法接受两个参数 和 ,用于设置分词器的 n-gram 长度和步幅。__init__ngramstride
  2. 分词方法: 方法将输入的序列转换为大写,并根据 和 对序列进行分词。tokenizengramstride
  3. n-gram长度为 1 的处理:如果 为 1,直接将序列转换为字符列表。ngram
  4. n-gram长度大于 1 的处理:按步幅进行分词,并确保每个分词的长度等于 。ngram
  5. 最后一个分词的处理:如果最后一个分词长度小于 ,将其移除。ngram
  6. 返回分词结果:返回处理后的分词结果列表。
+ 法典+ 降价

3. 基因组词汇类

该类用于创建一个词汇表,用于将基因组片段映射为索引。

+ 法典+ 降价
[4]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>class</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">GenomicVocab</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">__init__</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">itos</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化词汇表,itos是一个词汇表列表</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">itos</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">itos</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建从词汇到索引的映射</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">stoi</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> {<span style="color:var(--jp-mirror-editor-variable-color)">v</span>: <span style="color:var(--jp-mirror-editor-variable-color)">k</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">k</span>, <span style="color:var(--jp-mirror-editor-variable-color)">v</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">enumerate</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">itos</span>)}</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-meta-color)">@classmethod</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">create</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">cls</span>, <span style="color:var(--jp-mirror-editor-variable-color)">tokens</span>, <span style="color:var(--jp-mirror-editor-variable-color)">max_vocab</span>, <span style="color:var(--jp-mirror-editor-variable-color)">min_freq</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建词汇表类方法</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 统计每个token出现的频率</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">freq</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">Counter</span>(<span style="color:var(--jp-mirror-editor-variable-color)">tokens</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 选择出现频率大于等于min_freq的token,并且最多保留max_vocab个token</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">itos</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-string-color)">'<pad>'</span>] <span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span> [<span style="color:var(--jp-mirror-editor-variable-color)">o</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">o</span>, <span style="color:var(--jp-mirror-editor-variable-color)">c</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">freq</span>.<span style="color:var(--jp-mirror-editor-property-color)">most_common</span>(<span style="color:var(--jp-mirror-editor-variable-color)">max_vocab</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">1</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">c</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">min_freq</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 返回包含词汇表的类实例</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">cls</span>(<span style="color:var(--jp-mirror-editor-variable-color)">itos</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
0秒
+ 法典+ 降价

代码解读

  1. 类初始化: 方法接受一个参数 ,它是一个词汇表列表。__init__itos

    • itos:从索引到词汇的映射。
    • stoi:从词汇到索引的映射,由 列表生成。itos
  2. 类方法 :创建词汇表的类方法,用于生成 类的实例。createGenomicVocab

    • 参数:
      • tokens:所有token的列表。
      • max_vocab:词汇表的最大容量。
      • min_freq:词汇在被包含到词汇表中的最低频率。
    • 步骤:
      • 统计 中每个token出现的频率。tokens
      • 按照频率从高到低排序,并选择出现频率大于等于 的token,最多保留 个。min_freqmax_vocab
      • 在词汇表中添加一个特殊的 token,用于填充序列。<pad>
      • 返回包含生成的 列表的 实例。itosGenomicVocab
+ 法典+ 降价

4. siRNA数据集类

该类用于加载siRNA数据,并将序列数据转换为模型可以处理的格式。

+ 法典+ 降价
[5]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>class</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">SiRNADataset</span>(<span style="color:var(--jp-mirror-editor-variable-color)">Dataset</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">__init__</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">df</span>, <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>, <span style="color:var(--jp-mirror-editor-variable-color)">vocab</span>, <span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>, <span style="color:var(--jp-mirror-editor-variable-color)">max_len</span>, <span style="color:var(--jp-mirror-editor-variable-color)">is_test</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>False</strong></span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化数据集</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">df</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">df</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 数据框</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">columns</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 包含序列的列名</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">vocab</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">vocab</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 词汇表</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenizer</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 分词器</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">max_len</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">max_len</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 最大序列长度</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">is_test</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">is_test</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 指示是否是测速集</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">__len__</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 返回数据集的长度</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">df</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">__getitem__</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">idx</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 获取数据集中的第idx个样本</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">row</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">df</span>.<span style="color:var(--jp-mirror-editor-property-color)">iloc</span>[<span style="color:var(--jp-mirror-editor-variable-color)">idx</span>]  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 获取第idx行数据</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 对每一列进行分词和编码</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">seqs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenize_and_encode</span>(<span style="color:var(--jp-mirror-editor-variable-color)">row</span>[<span style="color:var(--jp-mirror-editor-variable-color)">col</span>]) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">col</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">columns</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">is_test</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 仅返回编码后的序列(非测试集模式)</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seqs</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 获取目标值并转换为张量(仅在非测试集模式下)</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">target</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">tensor</span>(<span style="color:var(--jp-mirror-editor-variable-color)">row</span>[<span style="color:var(--jp-mirror-editor-string-color)">'mRNA_remaining_pct'</span>], <span style="color:var(--jp-mirror-editor-variable-color)">dtype</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">float</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 返回编码后的序列和目标值</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seqs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">target</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">tokenize_and_encode</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">seq</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">' '</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span>:  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 修改过的序列</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">tokens</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span>.<span style="color:var(--jp-mirror-editor-property-color)">split</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 按空格分词</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span>:  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 常规序列</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">tokens</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenize</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 使用分词器分词</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将token转换为索引,未知token使用0(<pad>)</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">encoded</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">vocab</span>.<span style="color:var(--jp-mirror-editor-property-color)">stoi</span>.<span style="color:var(--jp-mirror-editor-property-color)">get</span>(<span style="color:var(--jp-mirror-editor-variable-color)">token</span>, <span style="color:var(--jp-mirror-editor-number-color)">0</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">token</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">tokens</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将序列填充到最大长度</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">padded</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">encoded</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span> [<span style="color:var(--jp-mirror-editor-number-color)">0</span>] <span style="color:var(--jp-mirror-editor-operator-color)"><strong>*</strong></span> (<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">max_len</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">encoded</span>))</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 返回张量格式的序列</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">tensor</span>(<span style="color:var(--jp-mirror-editor-variable-color)">padded</span>[:<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">max_len</span>], <span style="color:var(--jp-mirror-editor-variable-color)">dtype</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">long</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
0秒
+ 法典+ 降价

代码解读

  1. 初始化: 方法初始化数据集的必要参数:__init__

    • df:包含数据的Pandas数据框。
    • columns:包含序列的列名列表。
    • vocab:词汇表对象,用于将token转换为索引。
    • tokenizer:分词器对象,用于将序列分割为token。
    • max_len:序列的最大长度,所有序列将被填充或截断到这个长度。
    • is_train:布尔值,指示数据集是否用于训练(默认为False)。
  2. 获取数据集长度: 方法返回数据集的样本数量。__len__

  3. 获取样本:getitem 方法获取数据集中指定索引的样本:

    • 获取指定行的数据。
    • 对每个包含序列的列进行分词和编码。
    • 获取目标值(mRNA_remaining_pct),并将其转换为张量。
    • 返回编码后的序列和目标值。
  4. 分词和编码: 方法对输入序列进行分词和编码:tokenize_and_encode

    • 如果序列中包含空格,按空格分词(表示序列已经被修改)。
    • 否则,使用分词器对序列进行分词。
    • 将分词结果转换为索引,未知用表示。token0(<pad>)
    • 对序列进行填充,使其长度等于最大长度 。max_len
    • 返回张量格式的填充序列。
+ 法典+ 降价

5. siRNA模型

这是一个基于GRU的神经网络模型,用于处理siRNA序列。

+ 法典+ 降价
[6]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>class</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">SiRNAModel</span>(<span style="color:var(--jp-mirror-editor-variable-color)">nn</span>.<span style="color:var(--jp-mirror-editor-property-color)">Module</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">__init__</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">vocab_size</span>, <span style="color:var(--jp-mirror-editor-variable-color)">embed_dim</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">200</span>, <span style="color:var(--jp-mirror-editor-variable-color)">hidden_dim</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">256</span>, <span style="color:var(--jp-mirror-editor-variable-color)">n_layers</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">3</span>, <span style="color:var(--jp-mirror-editor-variable-color)">d</span><span style="color:var(--jp-mirror-editor-variable-color)">ropout</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">0.5</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-builtin-color)">super</span>(<span style="color:var(--jp-mirror-editor-variable-color)">SiRNAModel</span>, <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>).<span style="color:var(--jp-mirror-editor-property-color)">__init__</span>()</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化嵌入层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">embedding</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">nn</span>.<span style="color:var(--jp-mirror-editor-property-color)">Embedding</span>(<span style="color:var(--jp-mirror-editor-variable-color)">vocab_size</span>, <span style="color:var(--jp-mirror-editor-variable-color)">embed_dim</span>, <span style="color:var(--jp-mirror-editor-variable-color)">padding_idx</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">0</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化GRU层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">gru</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">nn</span>.<span style="color:var(--jp-mirror-editor-property-color)">GRU</span>(<span style="color:var(--jp-mirror-editor-variable-color)">embed_dim</span>, <span style="color:var(--jp-mirror-editor-variable-color)">hidden_dim</span>, <span style="color:var(--jp-mirror-editor-variable-color)">n_layers</span>, <span style="color:var(--jp-mirror-editor-variable-color)">bidirectional</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>True</strong></span>, <span style="color:var(--jp-mirror-editor-variable-color)">batch_first</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>True</strong></span>, <span style="color:var(--jp-mirror-editor-variable-color)">dropout</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">dropout</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化全连接层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">fc</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">nn</span>.<span style="color:var(--jp-mirror-editor-property-color)">Linear</span>(<span style="color:var(--jp-mirror-editor-variable-color)">hidden_dim</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>*</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">4</span>, <span style="color:var(--jp-mirror-editor-number-color)">1</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># hidden_dim * 4 因为GRU是双向的,有n_l</em></span><span style="color:var(--jp-mirror-editor-comment-color)"><em>ayers层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化Dropout层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">dropout</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">nn</span>.<span style="color:var(--jp-mirror-editor-property-color)">Dropout</span>(<span style="color:var(--jp-mirror-editor-variable-color)">dropout</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">forward</span>(<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>, <span style="color:var(--jp-mirror-editor-variable-color)">x</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将输入序列传入嵌入层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">embedded</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">embedding</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">x</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">outputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 对每个嵌入的序列进行处理</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">embed</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">embedded</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">x</span>, <span style="color:var(--jp-mirror-editor-variable-color)">_</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">gru</span>(<span style="color:var(--jp-mirror-editor-variable-color)">embed</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 传入GRU层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">x</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">dropout</span>(<span style="color:var(--jp-mirror-editor-variable-color)">x</span>[:, <span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>, :])  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 取最后一个隐藏状态,并进行dropout处理</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">outputs</span>.<span style="color:var(--jp-mirror-editor-property-color)">append</span>(<span style="color:var(--jp-mirror-editor-variable-color)">x</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将所有序列的输出拼接起来</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">x</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">cat</span>(<span style="color:var(--jp-mirror-editor-variable-color)">outputs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">dim</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 传入全连接层</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">x</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-2-color)">self</span>.<span style="color:var(--jp-mirror-editor-property-color)">fc</span>(<span style="color:var(--jp-mirror-editor-variable-color)">x</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 返回结果</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">x</span>.<span style="color:var(--jp-mirror-editor-property-color)">squeeze</span>()</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    </span></span></span>
0秒
+ 法典+ 降价

代码解读

  1. 初始化方法 :__init__

    • vocab_size:词汇表大小,用于嵌入层。
    • embed_dim:嵌入维度,嵌入层将词汇映射为 维向量。embed_dim
    • hidden_dim:隐藏层维度,GRU的隐藏状态维度。
    • n_layers:GRU的层数。
    • dropout:层的丢弃率,用于防止过拟合。Dropout

该方法初始化了模型的各层,包括、、和。嵌入层GRU层全连接层Dropout层

  1. 前向传播方法 :forward

    • 将输入序列传入嵌入层进行词汇嵌入。
    • 对每个嵌入的序列进行处理,提取最后一个隐藏状态并进行处理。GRUDropout
    • 将所有处理后的序列输出拼接起来,并传入全连接层。
    • 返回经过全连接层后的结果。
+ 法典+ 降价

6. 评估指标计算函数

该函数用于计算模型的各项评估指标,包括精确度、召回率、F1值和评分。

+ 法典+ 降价
[7]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">calculate_metrics</span>(<span style="color:var(--jp-mirror-editor-variable-color)">y_true</span>, <span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span>, <span style="color:var(--jp-mirror-editor-variable-color)">threshold</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">30</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算平均绝对误差</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">mae</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">np</span>.<span style="color:var(--jp-mirror-editor-property-color)">mean</span>(<span style="color:var(--jp-mirror-editor-variable-color)">np</span>.<span style="color:var(--jp-mirror-editor-property-color)">abs</span>(<span style="color:var(--jp-mirror-editor-variable-color)">y_true</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span>))</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将实际值和预测值转换为二进制分类(低于阈值为1,高于或等于阈值为0)</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">y_true_binary</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> (<span style="color:var(--jp-mirror-editor-variable-color)">y_true</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong><</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">threshold</span>).<span style="color:var(--jp-mirror-editor-property-color)">astype</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">int</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">y_pred_binary</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> (<span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong><</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">threshold</span>).<span style="color:var(--jp-mirror-editor-property-color)">astype</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">int</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建掩码,用于筛选预测值在0和阈值之间的样本</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">mask</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> (<span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">0</span>) <span style="color:var(--jp-mirror-editor-operator-color)"><strong>&</strong></span> (<span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong><=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">threshold</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">range_mae</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">mean_absolute_error</span>(<span style="color:var(--jp-mirror-editor-variable-color)">y_true</span>[<span style="color:var(--jp-mirror-editor-variable-color)">mask</span>], <span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span>[<span style="color:var(--jp-mirror-editor-variable-color)">mask</span>]) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">mask</span>.<span style="color:var(--jp-mirror-editor-property-color)">sum</span>() <span style="color:var(--jp-mirror-editor-operator-color)"><strong>></strong></span> <span style="color:var(--jp-mirror-editor-number-color)">0</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">100</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算精确度、召回率和F1得分</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">precision</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">precision_score</span>(<span style="color:var(--jp-mirror-editor-variable-color)">y_true_binary</span>, <span style="color:var(--jp-mirror-editor-variable-color)">y_pred_binary</span>, <span style="color:var(--jp-mirror-editor-variable-color)">average</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-string-color)">'binary'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">recall</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">recall_score</span>(<span style="color:var(--jp-mirror-editor-variable-color)">y_true_binary</span>, <span style="color:var(--jp-mirror-editor-variable-color)">y_pred_binary</span>, <span style="color:var(--jp-mirror-editor-variable-color)">average</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-string-color)">'binary'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">f1</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">2</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>*</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">precision</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>*</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">recall</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>/</strong></span> (<span style="color:var(--jp-mirror-editor-variable-color)">precision</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">recall</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算综合评分</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">score</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> (<span style="color:var(--jp-mirror-editor-number-color)">1</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">mae</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>/</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">100</span>) <span style="color:var(--jp-mirror-editor-operator-color)"><strong>*</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">0.5</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span> (<span style="color:var(--jp-mirror-editor-number-color)">1</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">range_mae</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>/</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">100</span>) <span style="color:var(--jp-mirror-editor-operator-color)"><strong>*</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">f1</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>*</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">0.5</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">score</span></span></span></span>
0秒
+ 法典+ 降价

代码解读

  1. 计算平均绝对误差 (MAE):

    • mae = np.mean(np.abs(y_true - y_pred)):计算实际值和预测值之间的。平均绝对误差
  2. 将实际值和预测值转换为二进制分类:

    • y_true_binary = (y_true < threshold).astype(int):如果小于,设为,否则设为。实际值阈值10
    • y_pred_binary = (y_pred < threshold).astype(int):如果小于,设为,否则设为。预测值阈值10
  3. 创建掩码:

    • mask = (y_pred >= 0) & (y_pred <= threshold):筛选在和之间的样本。预测值0阈值
    • range_mae = mean_absolute_error(y_true[mask], y_pred[mask]) if mask.sum() > 0 else 100:计算这些样本的,如果符合条件的样本,设为。平均绝对误差没有100
  4. 计算精确度、召回率和F1得分:

    • precision = precision_score(y_true_binary, y_pred_binary, average='binary'):计算精确度。
    • recall = recall_score(y_true_binary, y_pred_binary, average='binary'):计算召回率。
    • f1 = 2 * precision * recall / (precision + recall):计算F1得分。
  5. 计算综合评分:

    • score = (1 - mae / 100) * 0.5 + (1 - range_mae / 100) * f1 * 0.5:综合MAE、范围内的MAE和F1得分,计算最终评分。
  6. 返回评分:

    • return score:返回综合评分。
+ 法典+ 降价

7. 模型评估函数

该函数用于在测试集上评估模型性能。

+ 法典+ 降价
[8]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">evaluate_model</span>(<span style="color:var(--jp-mirror-editor-variable-color)">model</span>, <span style="color:var(--jp-mirror-editor-variable-color)">test_loader</span>, <span style="color:var(--jp-mirror-editor-variable-color)">device</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-string-color)">'cuda'</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置模型为评估模式</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">eval</span>()</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">predictions</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">targets</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 禁用梯度计算</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>with</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">no_grad</span>():</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># 遍历测试数据加载器中的每个批次</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">target</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">test_loader</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将输入数据移动到指定设备上</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-color)">x</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">x</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 获取模型的输出</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">outputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">model</span>(<span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将预测结果从GPU移到CPU,并转换为numpy数组,添加到predictions列表中</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">predictions</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">outputs</span>.<span style="color:var(--jp-mirror-editor-property-color)">cpu</span>().<span style="color:var(--jp-mirror-editor-property-color)">numpy</span>())</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将目标值转换为numpy数组,添加到targets列表中</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">targets</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">target</span>.<span style="color:var(--jp-mirror-editor-property-color)">numpy</span>())</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将预测结果和目标值转换为numpy数组</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">np</span>.<span style="color:var(--jp-mirror-editor-property-color)">array</span>(<span style="color:var(--jp-mirror-editor-variable-color)">predictions</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">y_test</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">np</span>.<span style="color:var(--jp-mirror-editor-property-color)">array</span>(<span style="color:var(--jp-mirror-editor-variable-color)">targets</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算评估指标</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">score</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">calculate_metrics</span>(<span style="color:var(--jp-mirror-editor-variable-color)">y_test</span>, <span style="color:var(--jp-mirror-editor-variable-color)">y_pred</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 打印测试得分</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-builtin-color)">print</span>(<span style="color:var(--jp-mirror-editor-string-color)">f"Test Score: </span>{<span style="color:var(--jp-mirror-editor-variable-color)">score</span>:<span style="color:var(--jp-mirror-editor-number-color)">.4</span><span style="color:var(--jp-mirror-editor-variable-color)">f</span>}<span style="color:var(--jp-mirror-editor-string-color)">"</span>)</span></span></span>
0秒
+ 法典+ 降价

8. 模型训练函数

函数用于训练模型,并在每个epoch后评估模型的性能,保存最佳模型。

+ 法典+ 降价
[9]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>def</strong></span> <span style="color:var(--jp-mirror-editor-def-color)">train_model</span>(<span style="color:var(--jp-mirror-editor-variable-color)">model</span>, <span style="color:var(--jp-mirror-editor-variable-color)">train_loader</span>, <span style="color:var(--jp-mirror-editor-variable-color)">val_loader</span>, <span style="color:var(--jp-mirror-editor-variable-color)">criterion</span>, <span style="color:var(--jp-mirror-editor-variable-color)">optimizer</span>, <span style="color:var(--jp-mirror-editor-variable-color)">num_epoc</span><span style="color:var(--jp-mirror-editor-variable-color)">hs</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">50</span>, <span style="color:var(--jp-mirror-editor-variable-color)">device</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-string-color)">'cuda'</span>, <span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>: <span style="color:var(--jp-mirror-editor-builtin-color)">str</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-string-color)">""</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将模型移动到指定设备</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">best_score</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>-</strong></span><span style="color:var(--jp-mirror-editor-builtin-color)">float</span>(<span style="color:var(--jp-mirror-editor-string-color)">'inf'</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化最佳得分</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">best_model</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>None</strong></span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化最佳模型</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">epoch</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">range</span>(<span style="color:var(--jp-mirror-editor-variable-color)">num_epochs</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">train</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置模型为训练模式</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">train_loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">0</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化训练损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">targets</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">tqdm</span>(<span style="color:var(--jp-mirror-editor-variable-color)">train_loader</span>, <span style="color:var(--jp-mirror-editor-variable-color)">desc</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-string-color)">f'Epoch </span>{<span style="color:var(--jp-mirror-editor-variable-color)">epoch</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>}<span style="color:var(--jp-mirror-editor-string-color)">/</span>{<span style="color:var(--jp-mirror-editor-variable-color)">num_e</span><span style="color:var(--jp-mirror-editor-variable-color)">pochs</span>}<span style="color:var(--jp-mirror-editor-string-color)">'</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-color)">x</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">x</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>]  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将输入移动到设备</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">targets</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">targets</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将目标值移动到设备</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">optimizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">zero_grad</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 清空梯度</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">outputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">model</span>(<span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 前向传播</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">criterion</span>(<span style="color:var(--jp-mirror-editor-variable-color)">outputs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">targets</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">loss</span>.<span style="color:var(--jp-mirror-editor-property-color)">backward</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 反向传播</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">optimizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">step</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 更新参数</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">train_loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>+=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">loss</span>.<span style="color:var(--jp-mirror-editor-property-color)">item</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 累加训练损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">eval</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置模型为评估模式</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">val_loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">0</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化验证损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">val_preds</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">val_targets</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>with</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">no_grad</span>():</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">targets</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">val_loader</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-color)">x</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">x</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>]  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将输入移动到设备</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                <span style="color:var(--jp-mirror-editor-variable-color)">targets</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">targets</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 将目标值移动到设备</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                <span style="color:var(--jp-mirror-editor-variable-color)">outputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">model</span>(<span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 前向传播</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                <span style="color:var(--jp-mirror-editor-variable-color)">loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">criterion</span>(<span style="color:var(--jp-mirror-editor-variable-color)">outputs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">targets</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                <span style="color:var(--jp-mirror-editor-variable-color)">val_loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>+=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">loss</span>.<span style="color:var(--jp-mirror-editor-property-color)">item</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 累加验证损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                <span style="color:var(--jp-mirror-editor-variable-color)">val_preds</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">outputs</span>.<span style="color:var(--jp-mirror-editor-property-color)">cpu</span>().<span style="color:var(--jp-mirror-editor-property-color)">numpy</span>())  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 收集预测值</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                <span style="color:var(--jp-mirror-editor-variable-color)">val_targets</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">targets</span>.<span style="color:var(--jp-mirror-editor-property-color)">cpu</span>().<span style="color:var(--jp-mirror-editor-property-color)">numpy</span>())  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 收集目标值</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">train_loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>/=</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">train_loader</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算平均训练损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">val_loss</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>/=</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">val_loader</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算平均验证损失</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">val_preds</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">np</span>.<span style="color:var(--jp-mirror-editor-property-color)">array</span>(<span style="color:var(--jp-mirror-editor-variable-color)">val_preds</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">val_targets</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">np</span>.<span style="color:var(--jp-mirror-editor-property-color)">array</span>(<span style="color:var(--jp-mirror-editor-variable-color)">val_targets</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">score</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">calculate_metrics</span>(<span style="color:var(--jp-mirror-editor-variable-color)">val_targets</span>, <span style="color:var(--jp-mirror-editor-variable-color)">val_preds</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 计算验证集上的得分</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-builtin-color)">print</span>(<span style="color:var(--jp-mirror-editor-string-color)">f'Epoch </span>{<span style="color:var(--jp-mirror-editor-variable-color)">epoch</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>}<span style="color:var(--jp-mirror-editor-string-color)">/</span>{<span style="color:var(--jp-mirror-editor-variable-color)">num_epochs</span>}<span style="color:var(--jp-mirror-editor-string-color)">'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-builtin-color)">print</span>(<span style="color:var(--jp-mirror-editor-string-color)">f'Train Loss: </span>{<span style="color:var(--jp-mirror-editor-variable-color)">train_loss</span>:<span style="color:var(--jp-mirror-editor-number-color)">.4</span><span style="color:var(--jp-mirror-editor-variable-color)">f</span>}<span style="color:var(--jp-mirror-editor-string-color)">, Val Loss: </span>{<span style="color:var(--jp-mirror-editor-variable-color)">val_loss</span>:<span style="color:var(--jp-mirror-editor-number-color)">.4</span><span style="color:var(--jp-mirror-editor-variable-color)">f</span>}<span style="color:var(--jp-mirror-editor-string-color)">'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-builtin-color)">print</span>(<span style="color:var(--jp-mirror-editor-string-color)">f'Learning Rate: </span>{<span style="color:var(--jp-mirror-editor-variable-color)">optimizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">param_groups</span>[<span style="color:var(--jp-mirror-editor-number-color)">0</span>][<span style="color:var(--jp-mirror-editor-string-color)">"lr"</span>]:<span style="color:var(--jp-mirror-editor-number-color)">.6</span><span style="color:var(--jp-mirror-editor-variable-color)">f</span>}<span style="color:var(--jp-mirror-editor-string-color)">'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-builtin-color)">print</span>(<span style="color:var(--jp-mirror-editor-string-color)">f'Validation Score: </span>{<span style="color:var(--jp-mirror-editor-variable-color)">score</span>:<span style="color:var(--jp-mirror-editor-number-color)">.4</span><span style="color:var(--jp-mirror-editor-variable-color)">f</span>}<span style="color:var(--jp-mirror-editor-string-color)">'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">score</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>></strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">best_score</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">best_score</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">score</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 更新最佳得分</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">best_model</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">state_dict</span>().<span style="color:var(--jp-mirror-editor-property-color)">copy</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 更新最佳模型</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">save</span>(<span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">state_dict</span>(), <span style="color:var(--jp-mirror-editor-variable-color)">os</span>.<span style="color:var(--jp-mirror-editor-property-color)">path</span>.<span style="color:var(--jp-mirror-editor-property-color)">join</span>(<span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>, <span style="color:var(--jp-mirror-editor-string-color)">"best.pt"</span>.<span style="color:var(--jp-mirror-editor-property-color)">f</span><span style="color:var(--jp-mirror-editor-property-color)">ormat</span>(<span style="color:var(--jp-mirror-editor-variable-color)">epoch</span>)))  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 保存最佳模型</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-builtin-color)">print</span>(<span style="color:var(--jp-mirror-editor-string-color)">f'New best model found with score: </span>{<span style="color:var(--jp-mirror-editor-variable-color)">best_score</span>:<span style="color:var(--jp-mirror-editor-number-color)">.4</span><span style="color:var(--jp-mirror-editor-variable-color)">f</span>}<span style="color:var(--jp-mirror-editor-string-color)">'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>return</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">best_model</span>  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 返回最佳模型</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
0秒
+ 法典+ 降价

9. 训练主程序

+ 法典+ 降价
[10]
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置参数</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">bs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">64</span>    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 批次大小</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">epochs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">50</span>    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 训练的迭代次数</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">lr</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">0.001</span>    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 学习率</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">seed</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-number-color)">42</span>    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 随机种子</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">"output/models"</span>    <span style="color:var(--jp-mirror-editor-comment-color)"><em># 模型保存路径</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 选择设备</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">device</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">'cuda'</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">cuda</span>.<span style="color:var(--jp-mirror-editor-property-color)">is_available</span>() <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">'cpu'</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置随机种子以确保结果可重复</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">set_random_seed</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seed</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建输出目录</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>not</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">os</span>.<span style="color:var(--jp-mirror-editor-property-color)">path</span>.<span style="color:var(--jp-mirror-editor-property-color)">exists</span>(<span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">os</span>.<span style="color:var(--jp-mirror-editor-property-color)">makedirs</span>(<span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 加载数据</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">train_data</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">pd</span>.<span style="color:var(--jp-mirror-editor-property-color)">read_csv</span>(<span style="color:var(--jp-mirror-editor-string-color)">'train_data.csv'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 指定需要处理的列</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">columns</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-string-color)">'siRNA_antisense_seq'</span>, <span style="color:var(--jp-mirror-editor-string-color)">'modified_siRNA_antisense_seq_list'</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 删除包含空值的行</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">train_data</span>.<span style="color:var(--jp-mirror-editor-property-color)">dropna</span>(<span style="color:var(--jp-mirror-editor-variable-color)">subset</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">columns</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>+</strong></span> [<span style="color:var(--jp-mirror-editor-string-color)">'mRNA_remaining_pct'</span>], <span style="color:var(--jp-mirror-editor-variable-color)">inplace</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>True</strong></span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 将数据分为训练集和验证集</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">train_data</span>, <span style="color:var(--jp-mirror-editor-variable-color)">val_data</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">train_test_split</span>(<span style="color:var(--jp-mirror-editor-variable-color)">train_data</span>, <span style="color:var(--jp-mirror-editor-variable-color)">test_size</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">0.1</span>, <span style="color:var(--jp-mirror-editor-variable-color)">random_state</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">42</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建分词器</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">GenomicTokenizer</span>(<span style="color:var(--jp-mirror-editor-variable-color)">ngram</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">3</span>, <span style="color:var(--jp-mirror-editor-variable-color)">stride</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">3</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建词汇表</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">col</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">train_data</span>[<span style="color:var(--jp-mirror-editor-variable-color)">col</span>]:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">' '</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span>:  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 修改过的序列</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>.<span style="color:var(--jp-mirror-editor-property-color)">split</span>())</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenize</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>))</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">vocab</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">GenomicVocab</span>.<span style="color:var(--jp-mirror-editor-property-color)">create</span>(<span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span>, <span style="color:var(--jp-mirror-editor-variable-color)">max_vocab</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">10000</span>, <span style="color:var(--jp-mirror-editor-variable-color)">min_freq</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 找到最大序列长度</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">max_len</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">max</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">max</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>.<span style="color:var(--jp-mirror-editor-property-color)">split</span>()) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">' '</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenize</span>(<span style="color:var(--jp-mirror-editor-variable-color)">se</span><span style="color:var(--jp-mirror-editor-variable-color)">q</span>)) </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">train_data</span>[<span style="color:var(--jp-mirror-editor-variable-color)">col</span>]) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">col</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建数据集</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">train_dataset</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">SiRNADataset</span>(<span style="color:var(--jp-mirror-editor-variable-color)">train_data</span>, <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>, <span style="color:var(--jp-mirror-editor-variable-color)">vocab</span>, <span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>, <span style="color:var(--jp-mirror-editor-variable-color)">max_len</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">val_dataset</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">SiRNADataset</span>(<span style="color:var(--jp-mirror-editor-variable-color)">val_data</span>, <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>, <span style="color:var(--jp-mirror-editor-variable-color)">vocab</span>, <span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>, <span style="color:var(--jp-mirror-editor-variable-color)">max_len</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建数据加载器</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">train_loader</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">DataLoader</span>(<span style="color:var(--jp-mirror-editor-variable-color)">train_dataset</span>, <span style="color:var(--jp-mirror-editor-variable-color)">batch_size</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">bs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">shuffle</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>True</strong></span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">val_loader</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">DataLoader</span>(<span style="color:var(--jp-mirror-editor-variable-color)">val_dataset</span>, <span style="color:var(--jp-mirror-editor-variable-color)">batch_size</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">bs</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化模型</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">model</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">SiRNAModel</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">vocab</span>.<span style="color:var(--jp-mirror-editor-property-color)">itos</span>))</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">criterion</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">nn</span>.<span style="color:var(--jp-mirror-editor-property-color)">MSELoss</span>()</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化优化器</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">optimizer</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">optim</span>.<span style="color:var(--jp-mirror-editor-property-color)">Adam</span>(<span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">parameters</span>(), <span style="color:var(--jp-mirror-editor-variable-color)">lr</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">lr</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 训练模型</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">best_model</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">train_model</span>(<span style="color:var(--jp-mirror-editor-variable-color)">model</span>, <span style="color:var(--jp-mirror-editor-variable-color)">train_loader</span>, <span style="color:var(--jp-mirror-editor-variable-color)">val_loader</span>, <span style="color:var(--jp-mirror-editor-variable-color)">criterion</span>, <span style="color:var(--jp-mirror-editor-variable-color)">optimizer</span>, <span style="color:var(--jp-mirror-editor-variable-color)">epochs</span>, <span style="color:var(--jp-mirror-editor-variable-color)">device</span>, <span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
4分钟40秒
Epoch 1/50: 100%|██████████| 363/363 [00:05<00:00, 65.82it/s]
Epoch 1/50
Train Loss: 1366.2798, Val Loss: 1182.0657
Learning Rate: 0.001000
Validation Score: 0.3624
New best model found with score: 0.3624
Epoch 2/50: 100%|██████████| 363/363 [00:05<00:00, 70.36it/s]
Epoch 2/50
Train Loss: 1113.7635, Val Loss: 1022.5920
Learning Rate: 0.001000
Validation Score: 0.4021
New best model found with score: 0.4021
Epoch 3/50: 100%|██████████| 363/363 [00:05<00:00, 69.20it/s]
Epoch 3/50
Train Loss: 988.8086, Val Loss: 1003.5091
Learning Rate: 0.001000
Validation Score: 0.4637
New best model found with score: 0.4637
Epoch 4/50: 100%|██████████| 363/363 [00:05<00:00, 71.36it/s]
Epoch 4/50
Train Loss: 892.0006, Val Loss: 900.4926
Learning Rate: 0.001000
Validation Score: 0.4788
New best model found with score: 0.4788
Epoch 5/50: 100%|██████████| 363/363 [00:05<00:00, 71.21it/s]
Epoch 5/50
Train Loss: 812.8512, Val Loss: 872.7081
Learning Rate: 0.001000
Validation Score: 0.5524
New best model found with score: 0.5524
Epoch 6/50: 100%|██████████| 363/363 [00:05<00:00, 70.47it/s]
Epoch 6/50
Train Loss: 752.3206, Val Loss: 854.6747
Learning Rate: 0.001000
Validation Score: 0.5903
New best model found with score: 0.5903
Epoch 7/50: 100%|██████████| 363/363 [00:05<00:00, 71.25it/s]
Epoch 7/50
Train Loss: 707.7204, Val Loss: 822.6534
Learning Rate: 0.001000
Validation Score: 0.5825
Epoch 8/50: 100%|██████████| 363/363 [00:05<00:00, 69.78it/s]
Epoch 8/50
Train Loss: 677.9714, Val Loss: 839.9335
Learning Rate: 0.001000
Validation Score: 0.5883
Epoch 9/50: 100%|██████████| 363/363 [00:05<00:00, 71.17it/s]
Epoch 9/50
Train Loss: 651.2214, Val Loss: 810.0734
Learning Rate: 0.001000
Output of this cell has been trimmed on the initial display.
Displaying the first 50 top outputs.
Click on this message to get the complete output.
+ 法典+ 降价

10. 测试程序

+ 法典+ 降价
-法典降价生


<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 设置输出目录</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">"result"</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>not</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">os</span>.<span style="color:var(--jp-mirror-editor-property-color)">path</span>.<span style="color:var(--jp-mirror-editor-property-color)">exists</span>(<span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-variable-color)">os</span>.<span style="color:var(--jp-mirror-editor-property-color)">makedirs</span>(<span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 加载测试数据</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">test_data</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">pd</span>.<span style="color:var(--jp-mirror-editor-property-color)">read_csv</span>(<span style="color:var(--jp-mirror-editor-string-color)">'sample_submission.csv'</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">columns</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-string-color)">'siRNA_antisense_seq'</span>, <span style="color:var(--jp-mirror-editor-string-color)">'modified_siRNA_antisense_seq_list'</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">test_data</span>.<span style="color:var(--jp-mirror-editor-property-color)">dropna</span>(<span style="color:var(--jp-mirror-editor-variable-color)">subset</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">columns</span>, <span style="color:var(--jp-mirror-editor-variable-color)">inplace</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>True</strong></span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建分词器</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">GenomicTokenizer</span>(<span style="color:var(--jp-mirror-editor-variable-color)">ngram</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">3</span>, <span style="color:var(--jp-mirror-editor-variable-color)">stride</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">3</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建词汇表</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">col</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">test_data</span>[<span style="color:var(--jp-mirror-editor-variable-color)">col</span>]:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">' '</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span>:  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 修改过的序列</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>.<span style="color:var(--jp-mirror-editor-property-color)">split</span>())</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span>:</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            <span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenize</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>))</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">            </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">vocab</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">GenomicVocab</span>.<span style="color:var(--jp-mirror-editor-property-color)">create</span>(<span style="color:var(--jp-mirror-editor-variable-color)">all_tokens</span>, <span style="color:var(--jp-mirror-editor-variable-color)">max_vocab</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">10000</span>, <span style="color:var(--jp-mirror-editor-variable-color)">min_freq</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">1</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 找到最大序列长度</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">max_len</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">max</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">max</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">seq</span>.<span style="color:var(--jp-mirror-editor-property-color)">split</span>()) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>if</strong></span> <span style="color:var(--jp-mirror-editor-string-color)">' '</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>else</strong></span> <span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>.<span style="color:var(--jp-mirror-editor-property-color)">tokenize</span>(<span style="color:var(--jp-mirror-editor-variable-color)">se</span><span style="color:var(--jp-mirror-editor-variable-color)">q</span>)) </span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">                    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">seq</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">test_data</span>[<span style="color:var(--jp-mirror-editor-variable-color)">col</span>]) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">col</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建测试数据集</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">test_dataset</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">SiRNADataset</span>(<span style="color:var(--jp-mirror-editor-variable-color)">test_data</span>, <span style="color:var(--jp-mirror-editor-variable-color)">columns</span>, <span style="color:var(--jp-mirror-editor-variable-color)">vocab</span>, <span style="color:var(--jp-mirror-editor-variable-color)">tokenizer</span>, <span style="color:var(--jp-mirror-editor-variable-color)">max_len</span>, <span style="color:var(--jp-mirror-editor-variable-color)">is_t</span><span style="color:var(--jp-mirror-editor-variable-color)">est</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>True</strong></span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 创建数据加载器</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">test_loader</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">DataLoader</span>(<span style="color:var(--jp-mirror-editor-variable-color)">test_dataset</span>, <span style="color:var(--jp-mirror-editor-variable-color)">batch_size</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-number-color)">64</span>, <span style="color:var(--jp-mirror-editor-variable-color)">shuffle</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>False</strong></span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 初始化模型</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">model</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">SiRNAModel</span>(<span style="color:var(--jp-mirror-editor-builtin-color)">len</span>(<span style="color:var(--jp-mirror-editor-variable-color)">vocab</span>.<span style="color:var(--jp-mirror-editor-property-color)">itos</span>))</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">load_state_dict</span>(<span style="color:var(--jp-mirror-editor-variable-color)">best_model</span>)  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 加载最佳模型权重</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-variable-color)">device</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">model</span>.<span style="color:var(--jp-mirror-editor-property-color)">eval</span>()  <span style="color:var(--jp-mirror-editor-comment-color)"><em># 切换到评估模式,这对于某些模块如Dropout和BatchNorm是必需的</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 进行预测</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">preds</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> []</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>with</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">torch</span>.<span style="color:var(--jp-mirror-editor-property-color)">no_grad</span>():</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">    <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">tqdm</span>(<span style="color:var(--jp-mirror-editor-variable-color)">test_loader</span>):</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-comment-color)"><em># import pdb;pdb.set_trace()</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> [<span style="color:var(--jp-mirror-editor-variable-color)">x</span>.<span style="color:var(--jp-mirror-editor-property-color)">to</span>(<span style="color:var(--jp-mirror-editor-variable-color)">device</span>) <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>for</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">x</span> <span style="color:var(--jp-mirror-editor-keyword-color)"><strong>in</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>]</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">outputs</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">model</span>(<span style="color:var(--jp-mirror-editor-variable-color)">inputs</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">        <span style="color:var(--jp-mirror-editor-variable-color)">preds</span>.<span style="color:var(--jp-mirror-editor-property-color)">extend</span>(<span style="color:var(--jp-mirror-editor-variable-color)">outputs</span>.<span style="color:var(--jp-mirror-editor-property-color)">cpu</span>().<span style="color:var(--jp-mirror-editor-property-color)">numpy</span>())</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 将预测结果添加到测试数据中</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">test_data</span>[<span style="color:var(--jp-mirror-editor-string-color)">"mRNA_remaining_pct"</span>] <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">preds</span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">df</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">pd</span>.<span style="color:var(--jp-mirror-editor-property-color)">DataFrame</span>(<span style="color:var(--jp-mirror-editor-variable-color)">test_data</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-comment-color)"><em># 保存预测结果</em></span></span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">output_csv</span> <span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span> <span style="color:var(--jp-mirror-editor-variable-color)">os</span>.<span style="color:var(--jp-mirror-editor-property-color)">path</span>.<span style="color:var(--jp-mirror-editor-property-color)">join</span>(<span style="color:var(--jp-mirror-editor-variable-color)">output_dir</span>, <span style="color:var(--jp-mirror-editor-string-color)">"submission.csv"</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-builtin-color)">print</span>(<span style="color:var(--jp-mirror-editor-string-color)">f"s</span><span style="color:var(--jp-mirror-editor-string-color)">ubmission.csv 保存在 </span>{<span style="color:var(--jp-mirror-editor-variable-color)">output_csv</span>}<span style="color:var(--jp-mirror-editor-string-color)">"</span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit"><span style="color:var(--jp-mirror-editor-variable-color)">df</span>.<span style="color:var(--jp-mirror-editor-property-color)">to_csv</span>(<span style="color:var(--jp-mirror-editor-variable-color)">output_csv</span>, <span style="color:var(--jp-mirror-editor-variable-color)">index</span><span style="color:var(--jp-mirror-editor-operator-color)"><strong>=</strong></span><span style="color:var(--jp-mirror-editor-keyword-color)"><strong>False</strong></span>)</span></span></span>
<span style="color:#cccccc"><span style="color:var(--jp-content-font-color1)"><span style="color:inherit">​</span></span></span>
1秒
100%|██████████| 77/77 [00:00<00:00, 131.59it/s]
submission.csv 保存在 result/submission.csv

结果的一个展示

之后将结果保存下来就可以提交打开获得你的分数啦

三、总结

代码中出现的知识点

个人认为datawhale的项目是非常详细的,对于我这知识积累水平以及初入学习者是十分友好的

当然魔塔社区的云环境也是相对好用的,对于构建环境,以及容器相对负责的人来使用是很便捷的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值