set_weights 函数张量流的问题

Problem with set_weights function tensorflow

我已经构建了一个像这样的顺序模型:

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=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()函数,还是一样的。为什么会这样?

使用 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)