为什么不能结合keras模型的权重和梯度

时间:2019-07-10 09:25:46

标签: python tensorflow keras

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

0 个答案:

没有答案