位置编码和token编码

import numpy as np
from matplotlib import pyplot as plt

def voc_to_em(voc_size, voc_id, voc_pos, voc_dim, scale_num, scale_time_num, max_len):
    voc_size += 1

    # src_voc = 200
    scale_num = max([voc_size // voc_dim, scale_num])
    voc = voc_size * scale_num + scale_num

    y = scale_time_num * np.sin(np.linspace(0.002, np.pi / 2, max_len))  # 对应 序列 位置

    y0 = y[voc_pos] + 1
    voc_id = (voc_id + 1) * scale_num

    t1 = voc - voc_id
    x0 = np.linspace(0.002, np.pi / 2, voc_id)
    x1 = np.linspace(np.pi / 2, np.pi - 0.002, t1)

    out = (y0 * np.sin(x0)).tolist() + (y0 * np.sin(x1)).tolist()
    voc_dim_data = []
    for i in range(0, len(out), len(out) // voc_dim):
        j = i + len(out) // voc_dim
        voc_dim_data.append(np.mean(out[i:j]))
    return voc_dim_data

if __name__ == '__main__':

    # for _ in range(100):

        # 输入voc_size voc_id voc_pos  voc_dim  输出 voc_dim 向量
        res_list = []
        for i in range(2800,3000):
            res = voc_to_em(3000,i, i, 80, 100, 100, 3000)
            # plt.plot(res)
            res_list.append(res)
        plt.show()
        plt.plot(np.mean(np.array(res_list), 0))
        plt.show()
        # print(np.argmax(np.sum(np.array(res_list), 0)))

该代码是一个Python脚本,主要用于生成和可视化一组特定的数据向量。以下是代码的详细解析:

  1. 导入必要的库
    • numpy:用于数值计算。
    • matplotlib.pyplot:用于数据可视化。
  2. 定义函数 voc_to_em
    • 该函数用于生成一个基于输入参数的向量。
      参数说明:
    • voc_size:词汇表的大小。
    • voc_id:词汇表中特定词汇的ID。
    • voc_pos:词汇在序列中的位置。
    • voc_dim:输出向量的维度。
    • scale_num:用于调整词汇表大小的系数。
    • scale_time_num:用于调整时间序列的系数。
    • max_len:时间序列的最大长度。
      函数内部操作:
    • voc_size 加 1。
    • 计算新的 voc 值,它是原词汇表大小乘以 scale_num 再加上 scale_num
    • 生成一个时间序列 y,它是通过正弦函数得到的。
    • 计算 y0,它是时间序列 yvoc_pos 位置的值加 1。
    • 计算 voc_id 的新值,它是原 voc_id 加 1 后乘以 scale_num
    • 生成两个时间序列 x0x1,分别对应不同的区间。
    • 合并 x0x1 的正弦值,得到 out 列表。
    • out 列表平均分为 voc_dim 份,计算每份的平均值,得到 voc_dim_data
  3. 主程序
    • 在主程序中,通过循环调用 voc_to_em 函数,生成多个向量,并将它们存储在 res_list 中。
    • 循环的次数是从 2800 到 3000。
    • 使用 matplotlib.pyplot 绘制每个向量的图形(这部分被注释掉了)。
    • 绘制 res_list 中所有向量的平均值。
    • 显示图形。
    • 最后,计算所有向量平均值中最大值的索引(这部分也被注释掉了)。
      总体来说,这段代码的目的是生成一组基于特定参数的向量,并通过可视化手段展示这些向量的平均值。代码中的某些部分被注释掉了,可能是因为作者在调试或实验时暂时不需要这些功能。

猜你喜欢

转载自blog.csdn.net/weixin_32759777/article/details/143417386