2025-01-14
(続き)
あとやることは…
・ballスケジュール「make_x」を仮定
・InitAiTypesPlayerの実装(🔺)
・InitAiTypesPlayerをmake_xに追加
・ChangeAiModePlayerの実装(✅)
・ChangeAiModePlayerをmake_xに追加…しない(トグルスイッチでかつデフォルトがTrainの為)(✅)
・ChangeTravelModePlayerの実装(✅)
・ChangeTravelModePlayerをmake_xに追加しない(トグルスイッチでかつデフォルトがForwardの為)(✅)
・AiSettingsPlayerの実装
・AiSettingsPlayerを見ながら、TokenizerPlayerを作る。
・AiSettingsPlayerをmake_xに追加
・EmbeddingPlayerの実装
・EmbeddingPlayerをmake_xに追加
実装中のつぶやき
2025-01-18
やること
あとやることは…
・ballスケジュール「make_x」を仮定
・InitAiTypesPlayerの実装(🔺)
・InitAiTypesPlayerをmake_xに追加
・ChangeAiModePlayerの実装(✅)
・ChangeAiModePlayerをmake_xに追加…しない(トグルスイッチでかつデフォルトがTrainの為)(✅)
・ChangeTravelModePlayerの実装(✅)
・ChangeTravelModePlayerをmake_xに追加しない(トグルスイッチでかつデフォルトがForwardの為)(✅)
・AiSettingsPlayerの実装(✅)
・AiSettingsPlayerを見ながら、TokenizerPlayerを作る。(✅)
・AiSettingsPlayerをmake_xに追加(✅)
・EmbeddingPlayerの実装(✅)
・EmbeddingPlayerをmake_xに追加(✅)
・BallOfjectの、ScheduleOfScheduleに、「モードの分岐処理は、各々プレイヤー自体に実装してください。」と、冒頭に記入しておく。(✅)
・スケジュールモードのスケジュール(モード分岐)の実装(✅)
・そして、上記のスケジュール実装中で必要と認識し、仮定したプレイヤーの実装
・スケジュールの実装
…ちょっと待って、、、ScheduleOfScheduleでスケジュールモードを切り替えるより、スケジュールモードを切り替えるプレイヤーを作った方が良くない、、!?
わかった、ScheduleOfScheduleは
「このモードが終了した後に、このモードを実行する」
という概念のみにしよう。つまり、forやmodeのif分岐は、全てプレイヤーの方で実装すれば、ScheduleOfScheduleはものすごくスッキリしたものになる!!!(上記のやることリストをそのように改変済み)
2025-01-23
あとやることは、、
・BallOfjectの、ScheduleOfScheduleに、「モードの分岐処理は、各々プレイヤー自体に実装してください。」と、冒頭に記入しておく。(✅)
・スケジュールモードのスケジュール(モード分岐)の実装(✅)
・そして、上記のスケジュール実装中で必要と認識し、仮定したプレイヤーの実装
・スケジュールの実装
モード切り替えのペア実装が完了した。↓
// 最初はロードから。
if ("FirstMode" == this.ScheduleMode)
{
this.ScheduleMode = "ParamsLoadMode";
}
// Aiの推論設定
else if ("ParamsLoadMode" == this.ScheduleMode)
{
this.ScheduleMode = "SettingsOfPredictMode";
}
// 入力データのベクトル化
else if ("SettingsOfPredictMode" == this.ScheduleMode)
{
this.ScheduleMode = "ToVecOfXOfPredictMode";
}
// 推論を開始する
else if ("ToVecOfXOfPredictMode" == this.ScheduleMode)
{
this.ScheduleMode = "OnePositionLoopOfPredictMode"; // eosトークンで抜ける
}
// 大臣と情報交換する(推論結果とサンプルデータのやり取り)
else if ("OnePositionLoopOfPredictMode" == this.ScheduleMode)
{
this.ScheduleMode = "SNSWithDaijinMode"; // eosトークンで抜ける
}
// Aiの設定(訓練としての設定)
else if ("SNSWithDaijinMode" == this.ScheduleMode)
{
this.ScheduleMode = "SettingsOfTrainMode";
}
// 入力データとラベルデータの、ベクトル化
else if ("SettingsOfTrainMode" == this.ScheduleMode)
{
this.ScheduleMode = "ToVecOfXandTMode";
}
// 学習開始
else if ("ToVecOfXandTMode" == this.ScheduleMode)
{
this.ScheduleMode = "OnePositionLoopOfTrainMode";
}
// パラメータのセーブ(セーブするしないの判断処理を含む)
else if ("OnePositionLoopOfTrainMode" == this.ScheduleMode)
{
this.ScheduleMode = "ParamsSendToHomePCMode";
}
// 推論設定に戻る(ループする) ループだけどこっちが正規ルートの為実装。
else if ("ParamsSendToHomePCMode" == this.ScheduleMode)
{
this.ScheduleMode = "SettingsOfPredictMode";
}
(ヤバっ、私の神的デザインパターンがバレるぅ💕)
未実装のモードの実装へ。
未実装のモード群
(実装次第チェック)
FirstMode(✅)
ParamsLoadMode()
SettingsOfPredictMode
ToVecOfXOfPredictMode
OnePositionLoopOfPredictMode
SNSWithDaijinMode
SettingsOfTrainMode
ToVecOfXandTMode
OnePositionLoopOfTrainMode
ParamsSendToHomePCMode
2025-01-23
やることリスト
FirstMode(✅)
ParamsLoadMode
→ これは内部で(
class BitEncoderDecoderPlayer(仮)
def FlattenAndEncodeToBits
def UnpackFromBitArray
)の実装が必要()
SettingsOfPredictMode
ToVecOfXOfPredictMode
OnePositionLoopOfPredictMode
SNSWithDaijinMode
SettingsOfTrainMode
ToVecOfXandTMode
OnePositionLoopOfTrainMode
ParamsSendToHomePCMode
スケジュールの実装()
InstallFromParams2DcodePlayer
は、
- エンコード(1行25bitの行列でデータを作る)プレイヤーを実行
- AiSettingsPlayerに渡す
の2つだけかな?
→でも、エンコード、デコードはプレイヤーでまとめたいよ…
2025-01-25~
試行錯誤中(https://chatgpt.com/g/g-kuufVcS5H-miraitoriko/c/67939986-7220-8012-b7d0-a4ca3710fff0)
・モードのスケジュールが完了
・仮定義したスケジュールの実装
・仮定義したプレイヤーの実装
・_BitEncoderDecoderPlayerの実装中
・
チェックリスト
[✅] FirstMode
[✅] ParamsLoadMode
[✅]_BitEncoderDecoderPlayer
[✅]FlattenAndEncodeToBits メソッド
[✅]UnpackFromBitArray メソッド
▷(https://chatgpt.com/g/g-kuufVcS5H-miraitoriko/c/6797df6c-8aac-8012-abea-3abf2bef8dfe)
▷ BitEncoderDecoderPlayerは、全てのパラメータを、ひとつの1次元ジャグにまとめて出力するメソッド、またその1次元ジャグをデコードロードするメソッドを持たせました。
なので、2Dcodeデータ ⇔ モデルParams のやり取りができるプレイヤーです。
[✅]OptimizerPlayerの実装
[🔺]作られたParamsのBit配列を、2Dcodeの限界容量毎にスプリットした2次元リストの作成(エンコード)するメソッド、それをデコードするメソッドを持った、新しいBitArraySplitterPlayerの実装
▷ 2Dコードの限界容量を取ってこよう(⚠️手間と判断。デバッグ時に実装する。)
[✅] // 二次元Bit配列からひとつ取り出すPlayerの実装
[] t_QRCodeErrorCorrectionAndMaskPlayerDir は多分使ってないですね、、。明確に使っていないことを確認する
[✅] // 二次元Bit配列にデータが無くなり次第(先頭のデータがnullになり次第)、次のモードを設定するPlayer の、実装(プレイヤーじゃないかも。)
[✅] // 二次元ジャグ化したら、各行の先頭にインデックスを加える(paddingSize=3 #100<1000枚程のテクスチャ使うから。) の実装
[✅]そのプレイヤーでエンコードされたデータを、forで回して沢山の2Dcodeを生産する形に、Modeを作り直し。
[✅] 二次元ジャグ化したら、各行の先頭にindexを追加する機能をどうにか入れる(BitArraySplitterPlayerに機能を追加する形にしよう。)
[✅] ParamsToBitDataModeのプレイヤー群のMainの再確認
[🔺]学習結果を今回保存するしないの判断をプレイヤーでやり、モード分岐をする。(保存するしないの条件だけ未実装)(ParamsSaveFlagControllingPlayerとして実装中…)
[]プレイヤー同士のクラス変数の渡し合いの実装
(
ParamsToBitDataMode
BitDataTo2DcodeMode
)
[] ParamsToBitDataMode は、一次元ジャグ化するためのモード、とスケジュールにはメモされているけれど、本当に?確かめる。ParamsToBitDataModeで実行されている内容は…(
InitFromQrcodePlayer(AllParamsを一次元ジャグ化)(✅)
ParamsSaveFlagControllingPlayer(全開セーブ時刻から時間経過した時 かつ左大臣がワールドに存在した時に🚩を立てる)(🔺)
QRCodeModePlayer(モードを数字に変えるだけ)(✅)
QRCodeCharacterCountPlayer(CalculateBitCount() が
"0010" (英数字モード) → 9ビット、、
などの初期化設定。具体的にモードごとのビット数を決定して、指定された長さでゼロ埋めしたビット列を生成。最終的には、
モード指示子と文字数ビット列を結合して、最終的なビット出力を
outputBits に格納。設定と最初のbitの用意だけなので、問題は無し)(✅)
QRCodeBitConversionPlayer(データをbitに変換するプレイヤー)(✅)
BitArraySplitterPlayer (QRの最大容量ごとにスプリットし、二次元ジャグ化しているプレイヤー)(✅)
)
[✅] Alphanumericモードは、
「
0 1 2 3 4 5 6 7 8 9
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
スペース $ % * + - . / :
」
しか変換ができないのだそう。なので、BitEncoderDecoderPlayer内では、アライメントをすべて「スペース $ % * / : 」のどれかにする様な改良が必要。修正した。README.mdにも「tokenizerにはalphabet飲みを使用してください」と記した。
[✅]あれ?AllParamsは二次元ジャグ。QRにするための一次元ジャグ化はどこ?(BitEncoderDecoderPlayerだ。でもこのプレイヤーはスケジュール内には存在させずに、ライブラリとして利用した気がする…使用している箇所を突き止める▷使っていなかった。BitEncoderDecoderPlayerをどうにか実装する。)(エンコードメソッドをInitFromQrcodePlayerResetのメインメソッドに実装した。)
[✅]思い返すと、重みやバイアスのなにか保存する時、文字列とfloat混ぜた気がするから、確認と修正(encode時にはstr化、Decode時には元に戻していたから問題なし)
[]SettingsOfPredictMode
[]ToVecOfXOfPredictMode
[]OnePositionLoopOfPredictMode
[]SNSWithDaijinMode
[]SettingsOfTrainMode
[]ToVecOfXandTMode
[]OnePositionLoopOfTrainMode
[]ParamsSendToHomePCMode
[]プレイヤー同士のクラス変数の渡し合いの実装
[] ParamsToBitDataMode → BitDataTo2DcodeMode は完了したので、モードスケジュールの通りに、実装を開始する