機械学習の学習経過・4

前回の記事からだいたい1ヶ月経過した。
※今回は機械学習の勉強はしてません。

そう。MacBookが届いたのである。(注文してからおよそ1ヶ月後)
すぐさまではなかったけども、iCloudやら何やらの設定をし
XCode、Unity、機械学習用にHomebrew経由でminicondaなど諸々インストールし、先代のMacと同じように学習ができる環境が整ったハズであった・・

環境を構築し

jupyter notebook

と打ったところで、Google Colaboratoryが動作したところで満足していた。
これが先週。

カスケード分類器の作成前に、受講が途中であった箇所を消化しきってしまおうと思い、コードの初期の呪文とも言える環境設定部分を打って実行すると

スクリーンショット 2021-02-07 20.19.13

動かんやんけ。

環境設定のコードを1つ1つ分離し、どこでコケるのか?を試して行ったところ

import tensorflow
import keras

2つ動かない。ってかimportすらできんってどういうことや。

なんとなく思い当たる節は2つ。
1つは最近Homebrewが3.0になり、Appleシリコンに対応した、というツイートを見かけたので、upgradeをかけたわけだが、なぜだかツイートには「Macでx86インストールからM1インストールに移行する方法は?」みたいな質問があり「brew bundle」みたいなものをコピーするみたいな助言があった。
自分は「とりあえず、brew upgradeでもするか」と2.7.7から3.0にアップグレードしていてバージョンもbrew --configで確認ずみ。
この更新方法が正しいのかどうかわからない、というのが1つ。

もう1つはtensorflow、kerasがAppleシリコン(ARM?)向けにビルドされてないバイナリなのではないか?という点。
AppleがTensorFlowをARMアーキテクチャ上で動作するようにフォークしたものもある、という記事を見かけたので、Homebrewで現状インストールできるライブラリがx86環境のものでカーネルが異常終了している、というのも考えられる。これが2つめ。

はっきりいってこれらPython関連の環境などについては全く知識を持ち合わせていないし、M1 Macbookが登場してから3ヶ月ちょっとくらいだと思うのでライブラリの対応が間に合ってない、というのもあると思う。(HomebrewのAppleシリコン対応の話もつい最近なので)
ここでとれる案は2つ。


1つは少ない情報をもとに解決策をさぐる。TensorFlowをビルドしたり。
実際、途中までビルドやろうとしたけどCUDAとか他のライブラリへの依存関係があるようだったのでそちらもAppleシリコン対応してるのか?とか調べる必要があると思う。
またはAppleがフォークしてる
https://github.com/apple/tensorflow_macos
これをなんとかする。これだけなんとかすればKerasもどうにかなるんだろうか?疑問は尽きないが自作解決を試み続ける。
2つめはHomebrewで提供されるTensorFlowが正式にAppleシリコンに対応した、みたいな情報を得るまで待つ。個人的にはこの方法で楽をしたい(
楽をしてる間は機械学習外のコードの作成を進める。

今とりあえず考えるのを放棄して(するな)機械学習外のコードの整理をしている。

将棋AIを作るという目標もあったので、一旦棋譜でも読めるようにするか、と思い
・CSA
・KI2
・KIF
というフォーマットの棋譜を読み書きできるようにするか、とC#で記述している。
書きかけのコードはこんな感じ

public partial class CSA
{
   public partial class v2_2
   {
       private List<Base> _commands = new List<Base>()
       {
           new Version(),

           new Sente(),
           new Gote(),

           new Info.Event(),

           new Exception(),
       };
       
       public void Exec( string buff, int index )
       {
           foreach ( var command in _commands )
           {
               if ( command.IsTarget( buff, index ) )
               {
                   var newIndex = command.Execute( buff, index );
                   
                   ・・・
               }
           }
       }
   }
}
private class Version : Base
{
   public override bool IsTarget( string buffer, int index )
   {
       var chunk = "V2.2";
       return chunk.Equals( buffer.Substring( index, chunk.Length ) );
   }

   public override int Execute( string buffer, int index )
   {
       var match = Regex.Match( buffer, @"[vV](\d+).(\d+)" );

       ・・・
   }
}

コードの完全版じゃないけど、CSAの部分部分を解析し情報を得る処理をコマンド化して対処させる、という感じの組み方。
Unityで動作確認しているのでこんな感じにログが出る。

スクリーンショット 2021-02-07 22.00.54

コマンドとして実装してる部分は動くけど、未実装のコマンドがでてきたら作成しているExceptionが走って処理が止まる。
作成者(自分)はそれを把握できるので、未対応コマンドを実装していく、というフォーマット仕様書読めよ、みたいな作り方をしている。呑気に。
コマンドを量産すればとりあえず読み込みはできると思うのでなんか進んだ感がある。


いや、機械学習の勉強が1mmも進んでないんでまずいんだけども(

いいなと思ったら応援しよう!