我想使用Keras模型中的梯度和权重通过梯度下降来计算新的权重。 但是新权重存在问题,Keras模型无法使用新权重。 当我运行第二个“测试”函数时,“ model.set_weights(weights)”收到一条错误消息:使用序列设置数组元素。
def test(weights=None):
batch_size = 64
epochs = 1
# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)
model = Sequential()
model.add(Dense(200, activation='relu', input_shape=(784,)))
model.add(Dense(10, activation='softmax'))
if weights is not None:
model.set_weights(weights)
model.compile(loss='categorical_crossentropy',
optimizer=SGD(lr=0.01),
metrics=['accuracy'])
history = model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=0,
validation_data=(x_test, y_test))
outputTensor = model.output
listOfVariableTensors = model.trainable_weights
gradients = k.gradients(outputTensor, listOfVariableTensors)
gradients = np.array(gradients)
weights = np.array(model.get_weights())
return weights, gradients
weights, gradients = test()
weights = weights - 0.01 * gradients
test(weights)