我试图在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)
答案 0 :(得分:0)
permute函数仅切换轴的位置,dims
参数告诉Keras您希望最终位置如何。例如,如果x
是4维且形状为(None, 2, 4, 5, 8)
-(此处为批次大小,则无),并且如果您指定dims = (3, 2, 1, 4)
,则将执行以下四个步骤:
请记住,索引从1
开始而不是0
。尺寸为零是批次大小。因此,置换层的输出最终将具有形状(5, 4, 2, 8)
。函数np.moveaxis
在NumPy中执行类似的操作。
例如,暗度应等于(5, 2, 1, 4, 3, 6, 7, 8, 9, 10)
。