1

给定一个设计矩阵(初始列为 1,对应于偏差因子),我可以使用各种 Python 工具执行标准的 NN 风格的 L2-Regularized 参数估计,其中只有权重是正则化的

scipy.optimize.minimize(lambda p: np.mean((np.dot(dmat, p) - y_data)**2) + lamb*np.dot(p[1:], p[1:]), np.zeros(n_params).T).x

或者

scipy.optimize.minimize(lambda p: np.mean((np.dot(dmat, p) - y_data)**2) + 2*lamb*tf.nn.l2_loss(p[1:]).eval(), np.zeros(n_params).T).x

tf.matrix_solve_ls但是我看不出有什么办法可以排除使用TensorFlow的正则化的偏差

tf.matrix_solve_ls(dmat, np.array([y_data]).T, l2_regularizer=lamb*len(dmat)).eval()

相当于

scipy.optimize.minimize(lambda p: np.mean((np.dot(dmat, p) - y_data)**2) + lamb*np.dot(p, p), np.zeros(n_params).T).x

如何使用 正则化排除偏差(或通过构造,第一个参数)tf.matrix_solve_ls

4

1 回答 1

1

不幸的是,当前版本的 matrix_solve_ls 无法做到这一点。另一方面,matrix_solve_ls 中的默认(快速)路径最近更改为简单的复合 Python 函数:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/linalg_ops.py#L293

您可以轻松地制作此代码的版本,其中 l2_regularizer 是一个向量(每个参数都有一个单独的值)。一般来说,在 matrix_solve_ls 中实现这样的泛化可能是一个好主意。也许您可以将此更改作为拉取请求提交?

于 2017-09-08T20:09:24.453 回答