小编Rob*_*rto的帖子

使用 Scipy Optimizer 和 Tensorflow 2.0 进行神经网络训练

在引入 Tensorflow 2.0 之后,scipy 接口 (tf.contrib.opt.ScipyOptimizerInterface) 已被删除。但是,我仍然想使用 scipy 优化器scipy.optimize.minimize(method='L-BFGS-B')来训练神经网络(keras 模型序列)。为了使优化器工作,它需要一个函数fun(x0)作为输入,其中x0是一个形状为 (n,) 的数组。因此,第一步是“展平”权重矩阵以获得具有所需形状的向量。为此,我修改了https://pychao.com/2019/11/02/optimize-tensorflow-keras-models-with-l-bfgs-from-tensorflow-probability/提供的代码。这提供了一个函数工厂来创建这样一个函数乐趣(x0)。然而,代码似乎不起作用,损失函数并没有减少。如果有人能帮我解决这个问题,我将不胜感激。

这是我正在使用的一段代码:

func = function_factory(model, loss_function, x_u_train, u_train)

# convert initial model parameters to a 1D tf.Tensor
init_params = tf.dynamic_stitch(func.idx, model.trainable_variables)
init_params = tf.cast(init_params, dtype=tf.float32)

# train the model with L-BFGS solver
results = scipy.optimize.minimize(fun=func, x0=init_params, method='L-BFGS-B')


def loss_function(x_u_train, u_train, network):
    u_pred = tf.cast(network(x_u_train), dtype=tf.float32)
    loss_value = tf.reduce_mean(tf.square(u_train - u_pred))
    return tf.cast(loss_value, dtype=tf.float32)


def function_factory(model, loss_f, x_u_train, …
Run Code Online (Sandbox Code Playgroud)

python neural-network keras tensorflow scipy-optimize

1
推荐指数
1
解决办法
4092
查看次数