Проблема с тензорным потоком функции set_weights - PullRequest
1 голос
/ 21 июня 2020

Я построил такую ​​последовательную модель:

model=Sequential()
model.add(Dense(40, activation='relu',input_dim=12))
model.add(Dense(60, activation='relu'))
model.add(Dense(units=3, activation='softmax'))
opt=tf.keras.optimizers.Adam(lr=0.001)
model.compile(loss="mse", optimizer=opt)
model.summary()

Я хотел бы создать вторую модель, а затем изменить ее веса в соответствии с моим правилом, поэтому я написал это code

    model2=model
    w1=model.get_weights()
    w2=model2.get_weights()
    for i in range(len(w1)):
        j=np.random.random(1)
        w1[i]=w2[i]*j
    model.set_weights(w1)
    model2.set_weights(w2)

После того, как цикл for w1 отличается от w2, но после того, как я установил веса обеих моделей и затем вызвал функции get_weights (), они остались прежними. Почему это происходит?

1 Ответ

0 голосов
/ 21 июня 2020

создайте копию своей модели с помощью tf.keras.models.clone_model

model=Sequential()
model.add(Dense(40, activation='relu',input_dim=12))
model.add(Dense(60, activation='relu'))
model.add(Dense(units=3, activation='softmax'))
opt=tf.keras.optimizers.Adam(lr=0.001)
model.compile(loss="mse", optimizer=opt)
model.summary()

model2 = tf.keras.models.clone_model(model) # make a copy
w1 = model.get_weights()
w2 = model2.get_weights()

for i in range(len(w1)):
    j=np.random.random(1)
    w1[i]=w2[i]*j
    
model.set_weights(w1)
model2.set_weights(w2)
...