Sigmora
ワークフロー

Pythonでゼロからニューラルネットワークを作る:ステップバイステップ

03
トレーニングのデバッグ

エラーで止まるトレーニングスクリプトをデバッグする

Pythonファイルは小さなネットワークのトレーニングを行うはずですが、エラーで停止したり、奇妙な数値を出力したりすることがあります。Sigmoraはファイルを開き、重要な行を特定し、Shellでトレーニングコマンドを実行して、カードに実際の出力を表示します。これにより、推測ではなく、実際に何が起こったかを確認できます。1つのファイルから始めましょう。エージェント自体はトレーニングを行いません。トレーニングはあなたのコードが行うため、時間がかかることがあります。ループは短くします:読み取り、実行、比較、変更。フォルダの選択、モードの選択、受け入れる変更の決定はあなたが行います。所有または使用許可のあるコード、データ、コンピュータのみを使用し、各実験を繰り返せるほど小さく保ちましょう。

01

フォルダを開く

トレーニングスクリプト、設定ファイル、ログを含む作業フォルダを選択します。ファイルツールはこのフォルダで機能し、list_dirはその内容を一覧表示します。使用許可のあるデータを同じ場所に保管し、スクリプト内のパスを短く保ちましょう。ファイルツールはこのフォルダを使用します。

02

読み取りを依頼する

Sigmoraにトレーニングスクリプトを読み取り、レイヤー、損失、ループを説明させます。read_fileとgrepは、該当する行を引用するため、説明を自分のコードと照合できます。Plan onlyモードでは変更は行われません。ブロックがまだ不明な場合は、もう一度質問してください。

03

コマンドを実行する

トレーニングコマンドを指定し、モードを選択します。ShellはWindows、WSL、またはSSH経由で自分のサーバー上でコマンドを実行し、カードには実際の出力と終了コードが表示されます。コマンドが実行される環境にPythonがインストールされている必要があります。ハードウェア上でのトレーニングには時間がかかる場合があります。

04

結果を確認する

カードを展開し、出力されたエラーや損失値を読み取ります。終了コードが0でも、エラーなくスクリプトが終了したことを意味するだけで、数値自体は自分で判断する必要があります。検証データでモデルを評価し、観察した内容を記録します。次に小さな変更を行うかどうかを決定します。

例:PythonでANDゲートを学習する単一ニューロン

perceptron_and.py
# AND gate: one neuron (perceptron) learns the table
rows = [((0,0),0), ((0,1),0), ((1,0),0), ((1,1),1)]
w = [0.0, 0.0]
b = 0.0
rate = 0.1
for epoch in range(20):
    for x, target in rows:
        total = w[0] * x[0] + w[1] * x[1] + b
        out = 1 if total > 0 else 0
        err = target - out
        w[0] += rate * err * x[0]
        w[1] += rate * err * x[1]
        b += rate * err
print("weights:", w, "bias:", b)

このファイルは、学習率と短い重み更新ループを使用して、単一ニューロンにANDゲートを学習させ、重みとバイアスを出力します。純粋なPythonを使用しており、ライブラリや乱数を使用しないため、実行するたびに同じ結果が得られます。Shellで実行し、エポック数を変更して再度実行すると、出力される重みの変化を確認できます。

ウォークスルー:畳み込みニューラルネットワークのPython実験を追跡する

トレーニングコードを読む

変更を行う前に、Sigmoraは読み取ります。read_fileでトレーニングスクリプトを開き、list_dirでデータフォルダを表示し、grepでレイヤー、損失、ループを定義する行を検索します。カードにファイルテキストが表示されるため、レイヤーサイズとデータの形状を比較できます。この段階ではエージェントは変更しません。ANDファイルのような論理ゲートのニューラルネットワークモデルは古典的な最初の演習であり、先月書いて忘れてしまったPythonでゼロから作るニューラルネットワークにも、同じ読み取りステップが適しています。ブロックについて平易な言葉で質問するか、説明のみを求めアクションなしで済ませたい場合はPlan onlyに切り替えてください。各説明をコードの横で読み、自分が書いた内容と一致しているか確認してください。

トレーニングコマンドを実行する

信頼できる実行にはAuto-runを、変更を加えるアクションを承認したい場合はAsk firstを選択します。Shellは、選択した環境でトレーニングコマンド(例:python perceptron_and.py)を開始し、カードには実際の出力と終了コードが表示されます。カードを展開して、畳み込みニューラルネットワークのPythonスクリプトのログを1行ずつ読み取ります。トレーニングは時間がかかるままです。Sigmoraは高速化しません。ニューラルネットワークで損失が収束しない場合、ログでそれを最初に確認できます。終了コードだけでなく数値を見てください。終了コードが0なのは、スクリプトが終了しただけだからです。コードに変更が必要かどうかを判断し、必要であればdiffを依頼してください。

形状エラーまたは損失の低下遅延を修正する

edit_fileはスクリプトを変更し、diffを表示します。Ask firstモードでは、diffを受け入れるまで書き込みは行われませんが、Auto-runでは変更が即時適用されます。形状エラーは通常、データと最初のレイヤーが一致しないことを意味し、修正はしばしば1つの数値の変更です。ほとんど変化しない損失は、学習率、データとラベルの不一致、または小さなバッチに過学習できないモデルを指す可能性があります。まずその小さなバッチで試してください。過学習と過少学習は異なる問題なので、大きな変更を行う前にトレーニング損失と検証損失を確認してください。チェスのためのニューラルネットワーク構築はより大きなプロジェクトですが、同じ方法で始まります。編集後、Shellでコマンドを再度実行し、新しい数値と古い数値を比較します。

結果をCSVファイルにログ記録する

実行を比較するには、ファイル内の数値が必要です。write_fileは作業フォルダにCSVファイルを作成し、append_fileはエポックごとに1行を追加し、read_fileはエージェントが2つの実行を並べて表示できるように再度読み込みます。Sigmoraはデータを分析しません。数値を保存して表示し、意味の判断はあなたが行います。検証データをトレーニングデータから分離し、テストセットは最後まで手付かずのままにしてください。Plan onlyモードでは、何も実行せずに次の実験を計画として記録できます。準備ができたら、モードを切り替えてエージェントに実行させます。結果を保存する前に、CSVファイルを開き、行がカードの出力と一致しているか、各列にラベルが付けられているか確認してください。

Windows用のSigmora

自分のプロジェクトでワークフローを試す

Sigmoraをダウンロード ↗