Я - специалист по данным, и некоторое время я думал, что, когда я обучаю модель, она корректирует свои веса в зависимости от скорости обучения в направлении градиента, чтобы найти оптимальную точность моей метрики ... Так что технически всеэти скорректированные веса могут быть сгенерированы вручную и использованы для определения оптимальной точности моей заданной задачи.
Поэтому я попытался создать функцию, которая получает разность всех чисел (например, скорость обучения, например, 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) и, конечно, для других. Заранее спасибо!