keras中的Permute函数中的参数'dims'是什么意思?

时间:2018-12-21 01:45:45

标签: python keras

我试图在Keras核心层中使用def viterbi (transition, emission, sentence): #set tag as start of sentence and assign a value tags=emission.index.tolist() #for t in tags: #for t2 in tags: #if (t2,t) not in transition: #transition[(t2,t)]=0.000001 start={} for tag in tags: if tag == '<s>': start['<s>']=1 else: start[tag] = 0 i=0 for word in sentence: if word not in list(emission): #if wordscaps.match(sentence[i]): #sentence[i]='<UNK2>' else: sentence[i]='<UNK>' i = i+1 vit=[{}] for tag in tags: vit[0][tag]={"current":start[tag]*emission.loc[(tag,sentence[0])], "previous":None} for index in range (1,len(sentence)): vit.append({}) for t in tags: (prob, oldtag)=max((vit[index-1][prev]["current"]*transition[(prev,t)]*emission.loc[(t,sentence[index])],prev)for prev in tags) vit[index][t]={"current":prob,"previous":oldtag} likeliest_tags=[] maxprob=max(value["current"]for value in vit[-1].values()) #print(maxprob) previous= None for tag, everything in vit[-1].items(): if everything["current"]==maxprob: likeliest_tags.append(tag) previous=tag break for t in range(len(vit)-2,-1,-1): likeliest_tags.insert(0, vit[t+1][previous]["previous"]) previous=vit[t+1][previous]["previous"] return likeliest_tags

根据文档:

  

尺寸:整数元组。排列方式,不包括   样本尺寸。索引从1开始。例如,(2,1)个置换   输入的第一维和第二维。”

并给出了以下示例代码,

问题是:(2,1)是做什么的?如果我的输入要素具有10个维度,并且我需要将第1,3,5个要素的顺序更改为(5,1,3),那么我应该只使用(5,1,3)作为参数值“暗淡”这个功能?

keras.layers.Permute(dims)

1 个答案:

答案 0 :(得分:0)

permute函数仅切换轴的位置,dims参数告诉Keras您希望最终位置如何。例如,如果x是4维且形状为(None, 2, 4, 5, 8)-(此处为批次大小,则无),并且如果您指定dims = (3, 2, 1, 4),则将执行以下四个步骤:

  1. 第3维将移至第一个
  2. 第二维将移至第二
  3. 第一维度将移至第三维度
  4. 第四维度将移至第四维度

请记住,索引从1开始而不是0。尺寸为零是批次大小。因此,置换层的输出最终将具有形状(5, 4, 2, 8)。函数np.moveaxis在NumPy中执行类似的操作。

例如,暗度应等于(5, 2, 1, 4, 3, 6, 7, 8, 9, 10)