スパイラル形状のデータをどのように分類しますか?


9

私はテンソルフローの遊び場をいじり回しています。入力データセットの1つはスパイラルです。どの入力パラメーターを選択しても、ニューラルネットワークをどれほど広く深いものにしても、スパイラルに適合できません。データサイエンティストはこの形状のデータにどのように適合しますか?


回答:


11

この種の問題には多くのアプローチがあります。最も明白なのは、新しい機能作成することです。私が思いつくことができる最高の機能は、座標を球面座標に変換することです。

私は遊び場でそれを行う方法を見つけていないので、これに役立つはずのいくつかの機能(罪の機能)を作成しました。500回の反復の後、飽和し、0.1スコアで変動します。これは、これ以上の改善は行われないことを示唆しており、おそらく私は隠れ層を広くするか、別の層を追加する必要があります。

隠れ層にニューロンを1つだけ追加した後、300回の反復後に0.013を簡単に取得できることは驚くにあたりません。新しいレイヤーを追加することでも同様のことが起こります(0.017、ただし500回の反復が大幅に長くなった後。エラーの伝播が難しくなるため、驚きもありません)。ほとんどの場合、学習率で遊んだり、適応学習を行ってそれを速くしたりできますが、これはここでは重要ではありません。

ここに画像の説明を入力してください


球面座標!学部生の微積分を思い出しました。
Souradeep Nanda 2016

4
@SouradeepNandaは、人々がMLで非常に重要であると学校で役に立たないと考える数学の多くを見つけます
Salvador Dali

私のような好奇心旺盛な人のために、私は結果再現しようとしていますが、物事はそれほどスムーズに行きません
codevision


3

thetaアークタンyバツrバツ2+y2

バツ2y2

ここに画像の説明を入力してください


どのように「だまされた」かについて詳しく説明できますか?これらの機能をどのように追加しましたか?GitHubからプレイグラウンドをダウンロードして変更しましたか?またはこれを行うためのより直接的な方法はありますか?
ジム

私もこのハックを適用する方法を考えていました。ブラウザー内で実行しようとしましたが、うまくいきませんでした。次に、ソースコードをフォークして新しい入力機能を追加することにしました。あなたはそれをここで
Cankut

0

バニラテンソルフロープレイグラウンドスパイラルソリューション

これは、追加機能や変更を加えていない、バニラTensorflowプレイグラウンドの例です。スパイラルの実行時間は187〜300エポックでした。Lasso正則化L1を使用して、係数を削除しました。出力が過剰に適合しないように、バッチサイズを1つ減らしました。2番目の例では、データセットにノイズを追加してから、L1を上げて補正しました。

ここに画像の説明を入力してください


0

ソリューション私は裁判の時間後に到達したが、通常はわずか100エポックに収束します

ええ、私はそこに最もスムーズな決定境界がないことを知っていますが、それはかなり速く収束します。

![0.6%テストエラー

私はこのスパイラル実験からいくつかのことを学びました:

  • 出力層は入力層以上でなければなりません。少なくとも、それがこのスパイラル問題の場合に気づいたことです。
  • この場合、0.1のように初期学習率を高く保ち、 3〜5%以下の低いテストエラーに近づいたら、学習率を1ノッチ(0.03)または2ずつ減らします。これにより、収束が速くなり、グローバルミニマムを飛び越えて回避することができます。
  • 右上のエラーグラフを確認すると、学習率を高く維持した場合の効果を確認できます。
  • 1のような小さいバッチサイズの場合、0.1は学習率が高すぎます。これは、モデルがグローバルミニマムを飛び越えて収束しないためです。
  • したがって、高い学習率(0.1)を維持したい場合は、バッチサイズも高く(10)してください。これにより、通常はゆっくりとスムーズに収束します。

偶然にも、私が思いついた解決策は、サルバドールダリによって提供されたものと非常に似ています。

直感や理由がある場合は、コメントを追加してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.