將preds的陣列中一維的部分去掉,也就是把無用的[ ]
都脫掉
將 p 從小到大排序,但返回的不是結果,而是下標
[:n] 是從頭到第n個數的前乙個數
[:-n] 是從頭到倒數第n個數的前乙個數
所以這句的含義是將除了top_n個**值的位置都置為0,也就保留了top_n個數進入候選
因為篩選了top_n個候選,需要歸一化概率
隨機選取乙個字元
def
pick_top_n
(preds, vocab_size, top_n=5)
: p = np.squeeze(preds)
# 去殼
p[np.argsort(p)[:
-top_n]]=
0# 篩選top_n
p = p / np.
sum(p)
# 歸一化概率
c = np.random.choice(vocab_size,
1, p=p)[0
]# 隨機選取乙個字元
return c
按概率隨機選取
據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...
按概率隨機選取
據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...
按概率隨機選取
據我了解,random.choice seq 是等概率選取乙個,不是我想要的。而numpy.random.choice seq,p,k 是按概率隨機重複選取多個,這正是我想要的。但是,我不想為這麼乙個函式引入巨大的numpy庫,所以打算自己實現乙個按概率隨機選取的函式。特此將 記錄如下 import...