python概率選取ndarray的TOP N

2021-10-09 10:23:53 字數 574 閱讀 5482

將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...