如何创建权重数组以找到最佳精度

2024-10-03 13:30:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个数据科学家,我一直在想,当我训练一个模型时,它会按照梯度方向的学习率来调整它的权重,以找到我度量的最佳精度。。。所以从技术上讲,所有这些调整后的权重都可以手动生成,并用于找到给定问题的最佳精度。你知道吗

因此,我尝试创建一个函数来接收给定模型中所有数字(例如学习率0.0001)和节点数量(即数组大小)的差值(可以为每个层创建权重可能性,尽管它也可以是一个参数)。你知道吗

(对于这个,我只使用一层。)

我自己也尝试过创造这个,但一开始就惨败了,因为它背后的逻辑正在打断我的大脑XD:

num = 1
lr=0.01
nodes = 100
all_posib = []
for a in range(nodes):
    llist = []
    for b in range(nodes):
        llist.append((num)*lr)
    for c in range(nodes):
        for d in range(nodes):
            llist2 = llist.copy()
            llist2[c] = ((num)*lr+(num+d)*lr)
            llist2 = [np.array([llist2])]
            all_posib.append(llist2)

因此,首先这是不完整的,但它应该给一个大致的想法,我想做什么。 其次,这需要以某种方式矢量化,或者可能有一个功能可以做得更好,因为它需要一个相当多的时间来加载已经。 第三,我知道在任何情况下,这都需要很长时间来加载重量,但我可能会让它通过几个晚上。你知道吗

下面是一个我可能会用到的模型示例:p,我最喜欢的就是把这个放在一个循环中,然后检查哪个权重组给出了最好的精确度:

def build_model():
    model = models.Sequential()
    model.add(layers.Dense(100, activation = "relu", input_shape = (train_data.shape[1], )))
    model.add(layers.Dense(1))
    model.compile(optimizer = 'Adam',loss = 'mse', metrics = ['mae'])
    return model

model = build_model()
model.set_weights(llist_weights)
test_mse_score, test_mae_score = model.evaluate(test_data, test_targets)

因此,如果您不想运行上述示例,我需要的输出基本上是给定节点/大小的所有可能权重的列表:

示例:

[[0,0,0,0.1],[0,0,0,0.2],[0,0,0,0.3]

[0,0,0.1,0.1],[0,0,0.2,0.1],[0,0,0.3,0.1]

[0,0.1,0.1,0.1],[0,0.2,0.1,0.1],[0,0.3,0.1,0.1]

[0.1,0.1,0.1,0.1],[0.2,0.1,0.1,0.1],[0.3,0.1,0.1,0.1]]

甚至可以列出所有想要的值,比如[0,0.1,0.2,0.3,0.4,0.5,0.6],然后创建大小为4的所有可能的组合(我的逻辑问题是想要的值比数组的大小多,所以我也不知道如何在逻辑上合并这个)

如果你能帮我解决这个问题,这将是一个很大的帮助(对我的余生XD),当然也对其他人。 提前谢谢!你知道吗


Tags: in模型test示例formodel精度range
1条回答
网友
1楼 · 发布于 2024-10-03 13:30:44

我四处冲浪了一点,因为在问了这个问题后,我开始明白如何接近这个XD。你知道吗

def get_all_posib_weights(nodes, lr=0.1, save=''):
    llist = (np.append(np.arange(1/lr)*lr, -np.arange(1, 1/lr)*lr))
    comb = itertools.combinations_with_replacement(llist, nodes)
    llist2 = list(comb)
    print(len(llist2))
    if len(save) > 0:
        for i, l in enumerate(llist2):
            np.save(save+'{}/{}-{}-{}.npy'.format(nodes, nodes, lr, i), l)
    return llist2Exchange/weights/'
list_weights = get_all_posib_weights(10, 0.2)

因此,这将工作,正如预期的那样,它有无限的可能性,基本上我计划找到最佳的权重集和训练模型从选择的权重集:) (我知道这很不切实际)

我把这个放在任何一个实际使用这个XD的人身上,也许会有一些天才来改进代码:p 再见,我会回来看看,告诉你它是否比正常的训练方法效果更好;)

相关问题 更多 >