2024年4月

灰底无边框带置信区间折线图

QQ图片20240413115141.png

  • a
import matplotlib.pyplot as plt
import numpy as np
import random

# 模拟数据
x = list(range(10))
y = [random.randint(0,10) for i in range(len(x))]
y2 = [random.randint(0,10) for i in range(len(x))]

y_upper = y + np.array([random.random() for i in range(len(x))])
y_lower = y - np.array([random.random() for i in range(len(x))])
y_upper2 = y2 + np.array([random.random() for i in range(len(x))])
y_lower2 = y2 - np.array([random.random() for i in range(len(x))])


# 绘制折线图
plt.plot(x, y,color='white')
plt.plot(x, y2,color='white')
plt.fill_between(x, y_lower, y_upper, color="#38C7E8", alpha=1)
plt.fill_between(x, y_lower2, y_upper2, color="#fb8eaa", alpha=1)

# 设置网格线的样式
plt.grid(color='white', linestyle='-', linewidth=1,  alpha=0.9)

# 设置网格的背景色
plt.gca().set_facecolor('#e8e8e8')  # 灰色底色
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['bottom'].set_visible(False)
plt.gca().spines['left'].set_visible(False)

# 显示图形
plt.show()
  • c
import matplotlib.pyplot as plt
import numpy as np
import random

# 模拟数据
x = list(range(10))
y = [random.randint(0,5) for i in range(len(x))]
y2 = [random.randint(0,5) for i in range(len(x))]

y_upper = y + np.array([random.random() for i in range(len(x))])
y_lower = y - np.array([random.random() for i in range(len(x))])
y_upper2 = y2 + np.array([random.random() for i in range(len(x))])
y_lower2 = y2 - np.array([random.random() for i in range(len(x))])


# 绘制折线图
plt.plot(x, y,color='#cd676b')
plt.plot(x, y2,color='#5a7fb8')
plt.fill_between(x, y_lower, y_upper, color="#e3c3c9", alpha=1)
plt.fill_between(x, y_lower2, y_upper2, color="#c1cbe1", alpha=1)

# 设置网格线的样式
plt.grid(color='white', linestyle='-', linewidth=1,  alpha=0.9)

# 设置网格的背景色
plt.gca().set_facecolor('#ececf3')  
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['bottom'].set_visible(False)
plt.gca().spines['left'].set_visible(False)

# 显示图形
plt.show()

其他的

piccc.png

好的,让我通过一个简单的例子来说明解码器的生成过程。

假设我们正在进行英语到法语的翻译任务,我们已经训练好了一个 Transformer 模型。现在我们要将一个简单的英文句子 "I love playing basketball." 翻译成法语。

  1. 准备工作:

    • 输入句子:"I love playing basketball."
    • 目标是生成法语句子。
  2. 编码器(Encoder):

    • 将输入句子转换成词嵌入向量。
    • 经过编码器的多层自注意力机制和前馈神经网络,得到输入句子的编码表示。
  3. 解码器(Decoder):

    • 解码器的初始输入是一个特殊的起始标记 <start>。
    • 解码器开始生成第一个法语单词。
  4. 生成第一个单词:

    • 解码器首先考虑编码器的输出和初始输入(起始标记 <start>),以及已经生成的部分法语序列。
    • 解码器计算每个可能的法语单词的概率分布。
    • 例如,可能的第一个法语单词是 "J'aime"(意为 "I love")。
    • 解码器选择具有最高概率的单词作为第一个生成的单词。
  5. 生成后续单词:

    • 解码器在生成后续单词时,考虑前面已经生成的部分法语序列。
    • 它利用编码器的输出和已经生成的部分法语序列,通过自注意力机制来预测下一个单词。
    • 例如,下一个可能的单词是 "jouer"(意为 "playing")。
    • 解码器选择具有最高概率的单词作为下一个生成的单词。
  6. 重复生成过程:

    • 解码器重复这个生成过程,逐词地生成整个法语句子。
    • 每个单词的生成都取决于前面已经生成的部分法语序列和编码器的输出。
  7. 生成结束标记:

    • 解码器生成序列的过程会一直持续,直到生成了一个特殊的结束标记 <end>,或者达到了预先定义的最大长度。

通过这个过程,解码器逐词地生成了目标语言的句子,同时考虑了前面已经生成的部分序列和编码器的输出,从而实现了翻译任务。

TSP

考虑TSP的翻译,应该是用现有路径去预测下一步,而不是现有节点。
可以先用监督训练看看效果。