let J = (-1.0 * y) .* MatrixMath.log <| Activation.sigmoid (X * theta)
let J = (-1.0 * y) .* MatrixMath.log (Activation.sigmoid (X * theta))
Run Code Online (Sandbox Code Playgroud)
我有以下两组代码与前者给出一个编译错误说"这个功能需要太多的争论",但后者工作正常.
我认为管道向后运营商的目标主要是改变我正在尝试做的评估顺序.
如何在不使用括号的情况下编写表达式?
编辑:
MatrixMath.log就是这么做的
type MatrixMath =
static member log X = X |> Matrix.map log
static member log X = X |> Vector.map log
Run Code Online (Sandbox Code Playgroud)
管道操作员的优先级较低.您尝试评估的是这样的:
let J = ((-1.0 * y) .* MatrixMath.log) <| (Activation.sigmoid (X * theta))
Run Code Online (Sandbox Code Playgroud)
或类似的暴行.
如果你真的需要在那里放管,请尝试这样的事情:
let J = (-1.0 * y) .* (MatrixMath.log <| Activation.sigmoid <| X * theta)
Run Code Online (Sandbox Code Playgroud)
或者分成两行:
let J =
let K = MatrixMath.log <| Activation.sigmoid (X * theta)
(-1.0 * y) .* K
Run Code Online (Sandbox Code Playgroud)