投稿

2月, 2023の投稿を表示しています

OpenMythosのサンプルプログラムを動かしました

1.概要 前回、OpenMythosの環境構築まで実現したので、GitHubにあるサンプルプログラム(Usage)を動かしてみました。一部エラーが発生しましたが、結果出力部分なので修正をしました。その内容を記述します。 2.詳細 Usageに記載されているPythonプログラムをopenmythos_usage.pyとして作成します。 $ source ~/mypy/bin/activate (mypy) $ pythoh3 openmythos_usage.py 下記エラーとなります [MLA] Parameters: 1,538,626 [MLA] Logits shape: torch.Size([2, 16, 1000]) [MLA] Generated shape: torch.Size([2, 24]) Traceback (most recent call last):   File "/home/nakasima/openmythos/openmythos_usage.py", line 48, in <module>     rho = torch.linalg.eigvals(A).abs().max().item()           ^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: linalg.eig: The input tensor A must have at least 2 dimensions. コードの下記部分を修正します #rho = torch.linalg.eigvals(A).abs().max().item() rho = A.abs().max().item() $ source ~/mypy/bin/activate (mypy) $ pythoh3 openmythos_usage.py [MLA] Parameters: 1,538,626 [MLA] Logits shape: torch.Size([2, 16, 1000]) [MLA] Generated shape: torch.Size([2, 24]) [MLA] Spectral radius ρ(A) = 0.3679 (mus...

テスト駆動開発を利用したfibonacciのコード作成 巨大計算編

1.概要 前回、再帰呼出しのボトルネックを解消したfibonacci関数をTDDで作成しました。今回は完成したfibonacci関数を利用して計算してみます。Fortran等の古い世代のプログラム言語を利用すると、数値の型が指定されるために桁溢れが発生して、大きな整数の計算はできません。しかし、pythonを利用すると非常に大きな整数の計算ができます。この内容を記述します。 2.詳細 fibonacci数列は、0,1,1,2,3,5,8,13,.....と継続する数列で、先行する2つの数値を足した値が、次の数値になる無限に続く数列です。初期値と次の値は、0と1になっています。前回作成したcode(fibonacci.py)を利用して修正します。 (1) code(fibonacci.py)を修正 まず、手始めにfibonacci(50)を計算するように修正します。 class Fibonacci:     def fibonacci(self, number):         fibolist = [0,1]         for i in range(2, number+1):             fibolist.append(fibolist[i-2] + fibolist[i-1])         return fibolist[number] if __name__ == '__main__':     obj = Fibonacci()     print(obj.fibonacci(50))     print() (2) coce(fibonacci.py)の実行 $ python3 fibonacci.py 12586269025 (3) code(fibonacci.py)を修正 次に、fibonacci(100000)を計算します。 非常に大きな整数になるので桁数も表示します。 class Fibonacci:     def fibonacci(self, n...

テスト駆動開発を利用したfibonacciのコード作成 性能向上編

 1.概要 前回、再帰呼出しを利用することで、fibonacci関数をTDDで作成しました。再帰呼出しは非常に便利な手法ですが、計算量により実用に適しない場合があります。その内容を説明した上で、TDD手法でfibonacci関数を再帰呼出しを利用しない方式へ修正することを説明します。 2.詳細 fibonacci数列は、0,1,1,2,3,5,8,13,.....と継続する数列で、先行する2つの数値を足した値が、次の数値になる無限に続く数列です。初期値と次の値は、0と1になっています。前回作成したtestcode(Testfibonacci.py)とcode(fibonacci.py)を利用して修正します。 (1) testcode(TestFibonacci.py)を修正 50番目の項目の試験を記述します。 48番目と49番目の項目を加えると、50番目の項目になります。 この試験項目を追加します。 import unittest from fibonacci import Fibonacci class TestFibonacci(unittest.TestCase):     def setUp(self):         self.obj = Fibonacci()     def tearDown(self):         del self.obj     def testFibonacci01(self):         assert(self.obj.fibonacci(0) == 0)         assert(self.obj.fibonacci(1) == 1)         assert(self.obj.fibonacci(2) == \                 self.obj.fibonacci(0) + self.obj.fibonacci(1))    ...

テスト駆動開発を利用したfibonacciのコード作成 再帰呼出編

1.概要 開発手法としてKent BeckのTDD(Test-Driven Development)を活用しています。参考書籍ではJavaを利用してfibonacci関数をTDDで開発する手法が紹介されています。ここでは、Pythonを利用してJava版と同じことを実施します。 TDDはテストコードを作成し、そのテストコードがパスするコードを作成するという作業を続けて、目的とするコードを作成する手法です。アジャイル(XP手法)の1つであり、スクラムなどの開発でも幅広く利用されている方法です。テストコードはUnitテスト方式で作成します。UnitテストはKent Beckが開発したものです。 2.詳細 fibonacci数列は、0,1,1,2,3,5,8,13,.....と継続する数列で、先行する2つの数値を足した値が、次の数値になる無限に続く数列です。初期値と次の値は、0と1になっています。 (1) testcode(TestFibonacci.py)を作成 import unittest from fibonacci import Fibonacci class TestFibonacci(unittest.TestCase):     None if __name__ == '__main__':     unittest.main() (2) testcode(TestFibonacci.py)を実行 python3 TestFibonacci.py fibonacciが存在しないとのエラー発生 Traceback (most recent call last):   File "TestFibonacci.py", line 4, in <module>     from fibonacci import Fibonacci ModuleNotFoundError: No module named 'fibonacci' (3) code(finonacci.py)を作成 class Fibonacci:     None if __name__ == '__main__':     obj = Fibonacci() (4) testco...

3目並べを利用したAlphaGoの学習 tensorflow-2編 対戦

1.概要 AlphaGoの勉強過程で3目並べを学んでいます。前回までTensorflow-1.15を利用ましたが、今回からTensorflow-2.9に実行環境を変更して、tensorflow-1.15と同じことを実行します。できるだけtensorflow-1.15の設定やコードを変更せずに、実行するために必要な最低限の変更に留めます。 2.詳細 (1) 概要 3目並べのフィールドを3☓3のイメージと考えて、手書き文字認識の手法を利用します。利用する環境はtensorflow-1.15環境です。入力データはminimax法で活用したすべての手順(9!=362880)の組み合わせの中から勝負が決まった時点の3目並べのフィールド情報と結果(勝ち、負け、引き分け)を利用します。 tensorflowで利用できる形式に変換し、学習をしてモデルを作成し、モデルを利用して3目並べの対戦をします。元情報がminimax法で解析した情報なので、tensorflowによる学習結果がminimax法まで到達できると最高の結果です。大まかな手順は以下の通りです。 (1) minimax法の解析を利用して学習用入力データを作成 (2) 作成した学習用入力データを利用して、tensorflowでモデル作成 (3) tensorflowのモデルを利用して実際に対戦 (1)の学習用入力データ作成部分に変わりはないので、(2)(3)を2回に分割して記述します。今回は(3)の説明です。 (2) 詳細 (3) tensorflowのモデルを利用して実際に対戦 ttttensorflow2.pyを作成します。動作環境はtensorflow-2.9環境です。この中で利用するtictactoe.pyはmontecarlo版を利用します。 トレーニングしたモデル(dl2model.h5)をロードします。この場合でも、alphabeta法で利用したis_reach()を利用しています。感触的にはtensorflow-1.15と同程度の手を打つようです。 from tictactoe import Tictactoe import random import tensorflow as tf import numpy as np def random_select(actions):     i...