응답하지 : 나는 그것을 실행할 때차트 (Fsharp.Charting)이 코드를 갖는
let errorChanged = new Event<(int * float)>()
let learn error data w w_ iter =
let rec learning error data w w_ i icount =
//recursive(loop) fire event
errorChanged.Trigger(i, e) //trigger event for chart update
if (/**/) then
learning /*params*/
else
/*do else*/
let plot = LiveChart.PointIncremental(errorChanged.Publish |> Event.every 5)
plot.ShowChart()
learning error data w w_ 0 iter
, 내가 (그리고 업데이트되지 않음) 응답하지 않습니다 포인트 차트 창을 참조하십시오. code samples에 따르면 이것은 잘 작동하지만 ... 어떻게 해결할 수 있습니까?
UPD :
내가 할 경우 :
let rec learning error data w w_ i icount = async {
let e = Seq.fold (fun s x ->
s + errorPart w w_ x x) 0.0 data
errorChanged.Trigger(i, e)
if (e > error && i <= iter) then
printfn "[iter] = %d of %d. [e] = %f" i icount e
let (w, w_) = Seq.fold (fun (w, w_) x ->
learnPart w w_ x x) (w, w_) data
return! learning error data (normalize w) (normalize w_) (i + 1) icount
else
let resultData = Seq.map (fun x -> calculatePart w w_ x) data
let y = resultData
|> Seq.map (fun (y, _) -> y)
|> Seq.concat
let x_ = resultData
|> Seq.map (fun (_, x_) -> x_)
|> Seq.concat
return (w, w_, e, y, x_) }
let plot = LiveChart.PointIncremental(errorChanged.Publish |> Event.every 5)
plot.ShowChart()
async { return! learning error data w w_ 0 iter}
|> Async.RunSynchronously
나는 예외를 얻을 : 유효 크로스 스레드 작업 없습니다. Dispatcher
과 같은 것이 필요합니다.
에 적용하지만,이 코드는 unit''반환합니다. ** UPD **를 참조하십시오. –