0

自転車共有データセットを使用して、入力が与えられた 1 日のレンタル数を予測しています。2011 年のデータをトレーニングに使用し、2012 年のデータを検証に使用します。線形回帰モデルの構築に成功しましたが、現在、リカレント ニューラル ネットワークを使用して時系列を予測する方法を見つけようとしています。

データ セットには 10 の属性 (月、営業日かどうか、温度、湿度、風速など) があり、すべて数値ですが、属性は日 (日曜日: 0、月曜日: 1 など) です。

ある日は前の日によって変わる可能性があり、おそらくそうなると思います (そして、10 個の属性すべてが必要になるわけではありません)。そのため、RNN を使用することを考えました。私はあまり知りませんが、いくつかのものとこれも読みました。このような構造を考えています。

10 input neuronsとがa hidden layerあり1 output neuronます。隠れ層に含まれるニューロンの数を決定する方法がわかりません。

t-1入力層を非表示層に接続するための行列、非表示層を出力層に接続するための行列、および隣接する時間ステップで非表示層を接続するための行列が必要ttと思いますt+1。合計 3 つの行列です。

あるチュートリアルでは、アクティベーション関数は でしたがsigmoid、正確にはわかりませんが、シグモイド関数を使用すると、0 と 1 の間の出力しか得られません。アクティベーション関数として何を使用すればよいですか? 私の計画は、これをn何度も繰り返すことです:

  • 各トレーニング データについて:
    • 順伝播
      • 入力を非表示層に伝播し、それを前の非表示層から現在の非表示層への伝播に追加します。これをアクティベーション関数に渡します。
      • 隠れ層を出力に伝播します。
      • エラーとその導関数を見つけて、リストに保存します
    • 逆伝播
      • リストから現在のレイヤーとエラーを見つける
      • 現在の隠れ層エラーを見つける
      • 体重の更新を保存する
    • 重み (行列) を学習率で乗算して更新します。

これは正しい方法ですか?出力として、0 ~ 1 の数値ではなく、実際の数値が必要です。

4

1 に答える 1

1

基本を学びたいだけなら、それが正しい方法のようです。実用的なニューラル ネットワークを構築したい場合、これは非常に貧弱なアプローチであり、Marcin のコメントが言うように、実用的なニューラル ネットワークを構築するほとんどすべての人は、ニューラル ネットワークのシミュレーションがすぐに利用できるパッケージを使用して構築します。一つ一つご質問にお答えします...

  1. 隠れ層に含まれるニューロンの数を決定する方法がわかりません。

ニューラル ネットワークに適したアーキテクチャを選択するための黄金律はありません。人々が経験から確立した多くの経験則があり、さまざまな組み合わせを試して出力を比較することで、適切なニューロンの数が決定されます。良い出発点は、(入力ニューロンと出力ニューロンの 3/2 倍、つまり (10+1)*(3/2)... です。したがって、隠れ層の 15/16 ニューロンから始めて、次に進むことができます。出力に基づいて数を減らします。)

  1. アクティベーション関数として何を使用すればよいですか?

繰り返しますが、「正しい」機能はありません。それはあなたのデータに合ったものに完全に依存します。さらに、双曲線正接、ロジスティック、RBF などのようなシグモイド関数には多くの種類があります。良い出発点はロジスティック関数ですが、ここでも試行錯誤によって適切な関数を見つけるだけです。

  1. これは正しい方法ですか?出力として、0 ~ 1 の数値ではなく、実際の数値が必要です。

すべての活性化関数 (出力ニューロンに割り当てられたものを含む) は 0 から 1 の出力を提供し、乗数を使用してそれを実数値に変換するか、複数の出力ニューロンを使用して何らかのエンコードを行う必要があります。これを手動でコーディングすると複雑になります。

考慮すべきもう 1 つの側面は、トレーニングの反復です。それを「n」回しても役に立ちません。アンダーフィッティングとオーバーフィッティングの両方を回避するために、試行錯誤を繰り返して最適なトレーニング反復を見つける必要があります。

これを行う正しい方法は、Python または R でパッケージを使用することです。これにより、大量のカスタマイズを使用してニューラル ネットをすばやくトレーニングできます。そこでは、さまざまなアクティベーション関数 (さらにはさまざまなトレーニング アルゴリズム) を使用して複数のネットをトレーニングおよびテストできます。手間をかけずにネットワーク アーキテクチャを構築できます。ある程度の試行錯誤を重ねることで、最終的に望ましい出力を与えるネットを見つけることができます。

于 2016-05-13T10:00:15.583 に答える