如何在python中的4维切片中找到最大的价值



我有一个字典,16作为第一个键,32作为第二个键,64作为第三个键,下面是一个片段:

perf = {
16: 
{
0.3: {
0.001: 
{'val_loss': 0.0, 'val_accuracy': 0.0}, 
0.01: 
{'val_loss': 0.0, 'val_accuracy': 0.0},
0.1: 
{'val_loss': 0.0, 'val_accuracy': 0.0}},
0.5: {
0.001: 
{'val_loss': 0.0, 'val_accuracy': 0.0}, 
0.01: 
{'val_loss': 0.0, 'val_accuracy': 0.0},
0.1: 
{'val_loss': 0.0, 'val_accuracy': 0.0}},
0.7: {
0.001: 
{'val_loss': 0.0, 'val_accuracy': 0.0}, 
0.01: 
{'val_loss': 0.0, 'val_accuracy': 0.0},
0.1: 
{'val_loss': 0.0, 'val_accuracy': 0.0}
}
}
}

这些零将用数字填充,当它完成时,我想知道哪个组合的值精度最大。作为回报,我想要像(16, 0.7, 0.01)这样的钥匙。如果可能的话,我想用多索引数据帧代替这个字典。

首先,您可以将嵌套的dict转换为DataFrame:

df = pd.DataFrame.from_dict({
(k0, k1, k2):v2
for k0, v0 in perf.items()
for k1, v1 in v0.items()
for k2, v2 in v1.items()
}, orient='index')

哪个给出:

>>> df
val_loss  val_accuracy
16 0.3 0.001       0.0           0.0
0.010       0.0           0.0
0.100       0.0           0.0
0.5 0.001       0.0           0.0
0.010       0.0           0.0
0.100       0.0           0.0
0.7 0.001       0.0           0.0
0.010       0.0           0.0
0.100       0.0           0.0

然后,像往常一样,你可以找到准确度最高的指数:

>>> df['val_accuracy'].idxmax()
(16, 0.3, 0.001)

使用香草Python(因此不使用df(:

m = (0,0,0,0)
for x in p.items():
for y in x[1].items():
for z in y[1].items():
a = float(z[1]['val_accuracy'])
if a > m[-1]:
m = (x[0],y[0],z[0],a)
print (m)

举个例子:

p = {
16: 
{
0.3: {
0.001: 
{'val_loss': 0.0, 'val_accuracy': 0.0}, 
0.01: 
{'val_loss': 0.0, 'val_accuracy': 0.0},
0.1: 
{'val_loss': 0.0, 'val_accuracy': 3}},
0.5: {
0.001: 
{'val_loss': 0.0, 'val_accuracy': 2}, 
0.01: 
{'val_loss': 0.0, 'val_accuracy': 0.0},
0.1: 
{'val_loss': 0.0, 'val_accuracy': 0.0}},
0.7: {
0.001: 
{'val_loss': 0.0, 'val_accuracy': 5}, 
0.01: 
{'val_loss': 0.0, 'val_accuracy': 0.0},
0.1: 
{'val_loss': 0.0, 'val_accuracy': 0.0}
}
}
}

输出:

(16, 0.7, 0.001, 5.0)

最新更新