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)
我已经构建了一个像这样的顺序模型:
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)