2016-11-06 8 views
0

MVCアプリケーションに内部プロジェクト(分離フォルダ)があります。私のプロジェクトのクラスが含まれています。 そして、私はそれがこのようになります初期化し1つのプロジェクトのためのコントローラおよび方法があります。質問があるMVCの内部プロジェクトの変数の変更中[C#]

@{ 
    ViewBag.Title = "initiate"; 
} 

<h3>Everything is prepared</h3> 
<!--<button type="button" onclick="location.href='@Url.Action("initiate", "BackpropController")'"/> --> 
@using (Html.BeginForm("initiate", "Backprop", FormMethod.Post)) { 
    @Html.AntiForgeryToken() 
    <input type="submit" value="Initiate" /> 
} 
<br> 
<br> 
    @{ string averageError = ViewBag.err; 
     if (averageError != null) { 
     <h4>@averageError</h4> } 
     else { <h4>no error</h4>} 
     } 

:どのように私は、ビュー更新した値で表示することができます

[HttpPost] 
    public ActionResult initiate() { 
       // System.Diagnostics.Debug.WriteLine("Initiated"); 
       Network net = new Network(normalizeInput); 
       net.train(); 
       // System.Diagnostics.Debug.WriteLine("average error :" + net.averageError); 
       double err = net.averageError; 
       ViewBag.err = err.ToString(); 
       return View("initiate"); 
     } 

し、そのビューに各反復? その変数は、最終的なものですが、この方法train()は、平均誤差は次のようにあるループが含まれているため:単純に言った。..
averageError += Math.Abs(testingSet[j].desiredOutput - neuron.getOutput());

それは反復の機能だろうと、私はエラーのグラフを作成したいと思いますので、それは私の興味を:グラフは、Iが投稿および方法train() 01に位置するすべての反復を更新すべきビュー内に配置されるべきである

F(エラー、反復)

お返事ありがとうございます。

+0

net.train()メソッドを変更できますか? –

+0

はい私はあります。問題は、私がコントローラーメソッドでインスタンスを作成してtrain()メソッドを呼び出すと、最終値を渡すことしかできないということです。 – wesker

答えて

0

質問が正しく分かるかどうかわかりません。

あなたのビューに反復渡したい場合、あなたはどちらかに持っている:

  1. は または
  2. を表示するために電車()メソッドの戻り値(もしあれば)を渡すビューモデルを作成します(電車から反復したい)と(望ましい)を表示するためにそれを渡す

https://stackoverflow.com/a/18608533/5929494

+0

答えに感謝します。 そのように見えるラベルを持っていて、train()メソッドの各反復ごとに値(たとえば反復回数またはエラー値)があるはずです 最終値を渡すことはできませんが、値はすべての反復を調整しています私はそれを見ることができるようにしたいと思います。私は思い出したように後でプロットを作る必要があります。 – wesker

0

NetworkクラストレインメソッドのaverageError値をコントローラに戻す必要があります。たとえば、あなたがそのような...

class Network { 
    //your other code 

    public IEnumerable<double> averageErrors {get; set;} 

    public void train() { 
     averageErrors = new List<double>(); 

     for (//your loop) { 
      averageError += Math.Abs(testingSet[j].desiredOutput - neuron.getOutput()); 
      averageErrors.Add(averageError); 
     } 
    } 
} 

などのネットワーククラスのプロパティでこれを行うことができます次に、あなたのコントローラに...

[HttpPost] 
public ActionResult initiate() { 
      // System.Diagnostics.Debug.WriteLine("Initiated"); 
      Network net = new Network(normalizeInput); 
      net.train(); 
      // System.Diagnostics.Debug.WriteLine("average error :" + net.averageError); 
      double err = net.averageError; 

      // you now have a list of averageErrors in your controller to use as you please 
      List<double> allErrors = net.averageErrors; 

      ViewBag.err = err.ToString(); 
      return View("initiate"); 
    } 

これは、あなたがすべての平均エラーにアクセスすることができますの列車の方法が完了した後、あなたが好きなようにビューでこれを報告することができます。

trainが長時間実行されていて、メソッドが実行されているときに平均エラーのリアルタイム更新を表示する場合、状況は少し複雑になります。私が使用する一般的なアプローチは、列メソッドを非同期にすることですが、ビューを返す前に実行を待っていません。ビューにはプレースホルダがあり、クライアント側のコードを使用して更新を待機します。 SignalR。 trainメソッドは定期的に更新をクライアントに送信し、最後に完了したデータを送信します。

関連する問題