人工知能の基礎(全15回)
【トピックス】 人工知能でできること,人工知能の歴史,人工知能による社会の変化, 人工知能の種類,データサイエンス,機械学習, ニューラルネットワーク,探索,知識表現,プロダクションシステム,Prolog,自然言語処理
大学で使用した自作の資料等を,手直しの上公開している. クリエイティブ・コモンズ BY NC SA.
【目次】
- aa-1. 人工知能の概要
- aa-2. データサイエンス・AIの事例
- aa-3. データサイエンス・AIの演習
- aa-4. 機械学習
- aa-5. 深層学習,ニューラルネットワーク
- aa-6. 画像分類システム
- aa-7. 学習と検証,学習不足,過学習,学習曲線
- aa-8. コンピュータビジョンと人工知能
- aa-9. 知的なゲームのルール,コンピュータプレイヤーがゲームに参加,状態空間表現
- aa-10. 総当たりによる探索
- aa-11. パス,木,グラフ,探索,発見的探索
- aa-12. プロダクションシステム
- aa-13. 述語,Prolog
- aa-14. 自然言語処理,品詞,構文解析
- aa-15. まとめ
【サイト内の関連ページ】
【サイト内の関連ページ】
資料
aa-1. 人工知能の概要
【トピックス】
人工知能, 人工知能でできること, 人工知能の種類, 人工知能でできること, 人工知能の現状, 人工知能の歴史, 人工知能による社会の変化
【概要】
人工知能(AI)はコンピュータが知的能力を持つ技術で、思考、判断、学習などの機能を有する。 AIは医療、金融、製造、農業など幅広い分野で用いられ、仕事の補助や代行といった役割を果たす。 AIの種類には機械学習や知的なITシステムがあり、用途によって選択する。 AIによる合成や生成は偽情報の拡散や倫理的な問題を引き起こす可能性があるため、注意が必要である。 AIの技術は急激に進歩してる。AIが引き起こす社会への影響や倫理的な問題も注視が必要である。 AIの発達は人間がよりクリエイティブになるためのツールともなり得る。
【関連するページ等】
- YouTube 動画 https://www.youtube.com/watch?v=O2Q2ym3hU54
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi1-258347339
【関連する外部ページ】 人工知能による合成
- Google によるオンラインデモ: https://cloud.google.com/vision
- 顔の合成: https://www.whichfaceisreal.com
- OpenAI での写真の合成, イラストの合成: https://openai.com/index/dall-e/
- 顔の表情など:https://cloud.google.com/vision/docs/drag-and-drop
- どちらが実在で, どちらがフェイクの顔か: https://www.whichfaceisreal.com/
創作, 人工知能による支援
- イラストの合成 (Waifu Labs): https://waifulabs.com/">
- AutoDraw: https://www.autodraw.com/
- magenta.tensorflow.org の AutoEncoder のデモ: https://magenta.tensorflow.org/sketch-rnn-demo
- affinelayer.com の Edges2cats のデモ: https://affinelayer.com/pixsrv/index.html
翻訳
- DeepL: https://www.deepl.com/translator
TensorFlow の仕組み
- playhground.tensorflow.org: https://playground.tensorflow.org
aa-2. データサイエンス・AIの事例
【トピックス】
人工知能, データサイエンス, 表計算ソフトウエア Excel, 散布図(Excel を使用), 合計, 平均(Excel を使用), 分布, 密度(Excel を使用), 人工知能と機械学習
【概要】
データサイエンスとAIは、データ活用に欠かせない分野である。 データサイエンスはデータから有益な情報を導き出す学問で、機械学習は大量のデータからパターンを学び、未知のデータに対する予測能力を持つ。 Excelを用いてデータを視覚的に表現し分析するという実践的なスキルを身につけることも重要。 これらを理解し、実践的経験を積むことが将来の活躍につながる。
【関連するページ等】
- YouTube 動画 https://www.youtube.com/watch?v=bJjGqTGXUZI
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi2-ai
【関連する外部ページ】
Excel ファイル(各自の演習に活用)
- 散布図: birth.xlsx
- 散布図,ヒストグラム: iris.xlsx
aa-3. データサイエンス・AIの演習
【トピックス】
人工知能, オープンデータ, 政府統計データ, クロス集計表(Excel を使用), 相関(Excel を使用)
【概要】
データサイエンスとAI、特にオープンデータとその利用について説明する。 オープンデータは公開されたデータで、一定の条件下で自由に利用できる。 これらは新しいビジネスやサービスの創造、コスト節約、透明性の向上に寄与する。 しかし、データの信頼性やプライバシーを確認し、著作権を尊重する必要がある。 また、オープンデータはAI、特に機械学習の重要なデータソースであり、AI研究者向けに公開されたサイトもあります。 政府統計データがどのように取得し利用されるかを示す。 そして、クロス集計表と相関の概念を紹介し、それらを使用した分析の例を見ていく。
【関連するページ等】
- YouTube 動画 https://www.youtube.com/watch?v=nV-OlL7M3fU
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi3-ai
【関連する外部ページ】
- e-Stat は, 政府統計の総合窓口 https://www.e-stat.go.jp/
- OpenStreetMap オンラインの地図サービス https://www.openstreetmap.org/
- Citymapper.com 世界中の大都市の乗り換え案内サービス https://citymapper.com/
- 気象庁強振観測データ https://www.data.jma.go.jp/eqev/data/kyoshin/jishin/index.html
- 気象庁震度データ https://www.data.jma.go.jp/svd/eqev/data/bulletin/shindo.html
- 環境省大気汚染状況データ https://www.env.go.jp/air/osen/
- 環境省水環境総合情報サイト https://water-pub.env.go.jp/water-pub/mizu-site/mizu/kousui/dataMap.asp
- 国立がん研究センターがん情報サービス https://ganjoho.jp/public/index.html
- WikiPedia https://ja.wikipedia.org/wiki
- 政府統計データダウンロードページ https://www.stat.go.jp/data/guide/download/index.html
- Office 365 オンライン版 https://portal.office.com
Excel ファイル(各自の演習に活用)
- クロス集計表(ピボットテーブル): 32.xlsx
aa-4. 機械学習
【トピックス】
人工知能, ニューラルネットワーク, ニューラルネットワークの種類, 線形近似, 最適化
【概要】
機械学習は、コンピュータがデータを使用して学習し、知的能力を向上させる技術である。 そのメリットとして、パターンや関連性を抽出し、複雑なプログラミングを省略でき、問題解決への他の手法の限界を超える可能性がある。 ニューラルネットワークは、生物の脳を模倣し、多くのユニットとその間の結合からなるネットワークであり、機械学習に広く活用されている。 自己符号化や分類、予測などの技術を利用して、データの特徴を抽出や予測結果を導くことが可能である。 また、線形近似は、データの特徴を把握する手法の一つであり、最適化は、目的関数を最小化または最大化するための調整を行う重要なプロセスである。
【関連するページ等】
- YouTube 動画 https://www.youtube.com/watch?v=yK3A4I9phu8
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi4-258347373
【関連する外部ページ】
- Office 365 オンライン版 https://portal.office.com
Excel ファイル(各自の演習に活用)
Python プログラム
最適化の用途
謝辞:https://docs.scipy.org/doc/scipy/tutorial/optimize.html のプログラムをそのまま使用しています.
import numpy as np from scipy.optimize import minimize def rosen(x): """The Rosenbrock function""" return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0) x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2]) res = minimize(rosen, x0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True}) print(res.x)
aa-5. 深層学習,ニューラルネットワーク
【トピックス】
人工知能, ニューラルネットワーク, ディープラーニング, ユニット, 活性化, 結合の重み, 活性化関数, 伝搬, ニューラルネットワークを用いた分類, ニューラルネットワークを用いた学習
【概要】
ニューラルネットワークは、複数のユニットが結合し、各ユニットは入力の重み付けや活性化関数の適用を行う。 構造は、層構造で全結合のものが最もシンプルで、データは入力から出力への一方向に流れ、各層のユニットは全結合される。 結合の重みやバイアスの調整により望みの出力を得る。 ディープニューラルネットワークは層が多いニューラルネットワークで、多層でも学習が成功するためのさまざまな工夫が必要とされる。
【関連するページ等】
- YouTube 動画 https://www.youtube.com/watch?v=spEQ_kztHAQ
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi5-258347381
【関連する外部ページ】
- Office 365 オンライン版 https://portal.office.com
- TensorFlow の仕組み https://playground.tensorflow.org
Excel ファイル(各自の演習に活用)
- 活性化関数: 53.xlsx
aa-6. 画像分類システム
【トピックス】
人工知能, 画像と画素, 濃淡画像のデータ, ニューラルネットワークを用いた分類, 画像分類システム, ニューラルネットワークの作成, 学習, 画像分類
【概要】
画像分類システムは、画像を特定のカテゴリに分類するもので、 手書き文字認識やパターン認識等に応用される。 画像分類は、ニューラルネットワークを使用して可能である。 ニューラルネットワークは機械学習の一種で、パターンや関連性を学習する。 画像分類システムでは、ニューラルネットワークの最終層のユニットで最も活性度の高いものを選択するという仕組みで分類が行われる。 画像分類システムは広範に活用されており、具体的な学習はTensorFlowの公式チュートリアル等を通じて可能である。
【関連するページ等】
- 手書き文字認識(Google Colaboratory) 実行結果とプログラムと説明を見るだけなら, Google アカウントは不要 https://colab.research.google.com/drive/1IfArIvhh-FsvJIE9YTNO8T44Qhpi0rIJ?usp=sharing
- YouTube 動画 https://www.youtube.com/watch?v=WYoevH_C1Is
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi6-258347399
【関連する外部ページ】
- 画像分類(TensorFlowの公式チュートリアル) 左側のメニューで「KerasによるMLの基本」を展開し, 「基本的な画像分類」をクリック 画像を10種類に分類。訓練データは60,000枚の画像と正解。検証データは10,000枚の画像と正解 https://www.tensorflow.org/tutorials
aa-7. 学習と検証,学習不足,過学習,学習曲線
【トピックス】
人工知能, 機械学習, 汎化, 汎化の失敗, 学習の繰り返し, 学習曲線
【概要】
機械学習は訓練データから学習し、未知のデータに対しても適切に処理できる「汎化」能力を持つ。 学習の過程は、訓練データでの誤差を減らすよう重み調整し繰り返すものだが、過学習となり未知データでの誤答が増える場合がある。 そのため、検証データを用いて過学習の確認が必要で、学習曲線はその一助となる。 最近の技術進展により過学習防止の技術が進展している。過学習の防止には大量データによる学習も大切である、コンピュータの高速化も一定の助けとなっている。
【関連するページ等】
- 手書き文字認識(Google Colaboratory) 実行結果とプログラムと説明を見るだけなら, Google アカウントは不要 https://colab.research.google.com/drive/1IfArIvhh-FsvJIE9YTNO8T44Qhpi0rIJ?usp=sharing
- YouTube 動画 https://www.youtube.com/watch?v=Qh-pu3Fvvuc
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi7-258347414
【関連する外部ページ】
- オーバーフィットとアンダーフィット(TensorFlowの公式チュートリアル) https://www.tensorflow.org/tutorials/keras/overfit_and_underfit?hl=ja
aa-8. コンピュータビジョンと人工知能
【トピックス】
人工知能, コンピュータビジョン, 畳み込み, プーリング, 畳み込みニューラルネットワーク, 物体検出, セグメンテーション, 顔情報処理, 姿勢推定
【概要】
コンピュータビジョンはコンピュータが実世界を理解・活用する技術で、 画像理解、物体検出、セグメンテーションなどが重要な要素である。 ディープニューラルネットワークや畳み込みにより、これらの精度向上が進んでいる。 畳み込みはデータとカーネルを重ね合わせて一つの値にまとめる手法である。 コンピュータビジョンは他にもある。 顔情報処理は顔検出、顔ランドマーク、顔のコード化、顔識別などがあり、 本人確認や表情推定、年齢判定など多岐にわたり利用される。 姿勢推定は人体の姿勢をAIで把握する技術で、 状況把握、行動予測、行動検知、危険察知などに応用される。
【関連するページ等】
- 畳み込みニューラルネットワーク, 学習, 検証, 学習曲線について https://colab.research.google.com/drive/18IPPkY96Oc6jkYD2su4cFgWcoYAskLo_?usp=sharing
- YouTube 動画 https://www.youtube.com/watch?v=8e6YqUl32gQ
- SlideShare: https://www.slideshare.net/kunihikokaneko1/mi8-258347436
【関連する外部ページ】
- CNN Explainer ジョージア工科大学 Polo Club 畳み込み層などの仕組みをビジュアルに学ぶことができるサイト https://poloclub.github.io/cnn-explainer/
- OneFormer のデモサイト 画像のセグメンテーション https://huggingface.co/spaces/shi-labs/OneFormer
- コンピュータビジョンのデモサイト https://cloud.google.com/vision/docs/drag-and-drop
aa-9. 知的なゲームのルール,コンピュータプレイヤーがゲームに参加,状態空間表現
SlideShare: https://www.slideshare.net/slideshow/aa9-252037023/252037023
【トピックス】
人工知能の種類、知的なゲームのルール、状態空間表現
YouTube 動画: https://www.youtube.com/watch?v=ftSktLFJ3y4
この回で学ぶこと.
- 知的なゲームのルール,コンピュータプレイヤーがゲームに参加,状態空間表現
- 知的なゲーム(ゲームのルールと勝利条件が定まっているもの)で, コンピュータが,ゲームのプレイヤーになる.
- そのための基礎として「状態空間表現」という方法を使い,コンピュータでもゲームのルールを扱えるようにすることを学ぶ.
- 9-3. ゲームのルールのプログラミング
【関連する外部ページ】
OnlineGDB の URL: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
a = 0 while(True): print('a = %d' % a) r = int(input()) if (r == 1) and (a < 21): a = a + 1 if (r == 2) and (a < 21): a = a + 2 if (r == 3) and (a < 21): a = a + 3
- 9-4. コンピュータ・プレイヤーがゲームに参加
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
def computer(a): if( a == 1 ): return 3 elif( a == 2 ): return 2 elif( a == 3 ): return 1 elif( a == 5 ): return 3 elif( a == 6 ): return 2 elif( a == 7 ): return 1 elif( a == 9 ): return 3 elif( a == 10 ): return 2 elif( a == 11 ): return 1 elif( a == 13 ): return 3 elif( a == 14 ): return 2 elif( a == 15 ): return 1 elif( a == 17 ): return 3 elif( a == 18 ): return 2 elif( a == 19 ): return 1 else: return 0 def move(a, r): if (r == 1) and (a < 21): a = a + 1 if (r == 2) and (a < 21): a = a + 2 if (r == 3) and (a < 21): a = a + 3 return a a = 0 while(True): print('a = %d' % a) r = int(input()) a = move(a, r) print('a = %d' % a) r = computer(a) print('computer: %d' % r) a = move(a, r)
aa-10. 総当りによる探索
SlideShare: https://www.slideshare.net/slideshow/aa10-252043660/252043660
【トピックス】
総当たり、総当たりのパス、状態空間表現での総当たり、パスと木、Python による総当たり
YouTube 動画: https://www.youtube.com/watch?v=o_Ms27QaSsg
この回で学ぶこと.
- 総当たりにより,正解を探索する.
- 総当たりは「正解を確実に探索できる方法」とも考えることができる.
- 状態空間表現(世界の状態が変数で表されている)でのルールをもとに 変数値を変化させてゴール(目的とする変数の値)に至ることを探索.
- 10-4. 状態空間表現での総当たりをコンピュータで動かす
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
import itertools import sys def move(x, y, r): success = False if (r == 1) and (x < 1): x = x + 1 success = True if (r == 2) and (x > 0): x = x - 1 success = True if (r == 3) and (y < 2): y = y + 1 success = True if (r == 4) and (y > 0): y = y - 1 success = True return(x, y, success) nsteps = 3 seq = [1, 2, 3, 4] success = False for j in list(itertools.product(seq, repeat=nsteps)): x, y = 0, 0 for i in j: x, y, success = move(x, y, i) if(not(success)): break if(success): print("%s %d %d" % (str(j), x, y))
- 10-6. 2つの水差しを総当たりで扱う
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
Python プログラムのソースコード
パスの長さ 2 で,総当りで調べるプログラム
- 2つの水差し(4リットルと,3リットル).
- 初期状態: x=0, y=0
import itertools import sys def move(x, y, r): success = False if (r == 1) and (x < 4): x = 4 success = True if (r == 2) and (x > 0): x = 0 success = True if (r == 3) and ((x + y) >= 3) and (y < 3): x, y = x + y - 3, 3 success = True if (r == 4) and ((x + y) <= 3) and (x > 0): x, y = 0, x + y success = True if (r == 5) and (y < 3): y = 3 success = True if (r == 6) and (y > 0): x = 0 success = True if (r == 7) and ((x + y) >= 4) and (x < 4): x, y = 4, x + y - 4 success = True if (r == 8) and ((x + y) <= 4) and (y > 0): x, y = x + y, 0 success = True return(x, y, success) nsteps = 2 seq = [1, 2, 3, 4, 5, 6, 7, 8] success = False for j in list(itertools.product(seq, repeat=nsteps)): x, y = 0, 0 for i in j: x, y, success = move(x, y, i) if(not(success)): break if(success): print("%s %d %d" % (str(j), x, y))
- 10-6. 2つの水差しを総当たりで扱う
パスの長さ 3 の総当りにより,ゴール状態にできるかを調べるプログラム
- 2つの水差し(4リットルと,3リットル).
- 初期状態: x=0, y=0
- ゴール状態: x=3, y=0
import itertools import sys nsteps = 3 goal = (3, 0) path=[1,2,3,4,5,6,7,8] for j in list(itertools.product(path, repeat=nsteps)): x, y = 0, 0 for i in j: if i == 1 and x < 4: x, y = 4, y elif i == 2 and y < 3: x, y = x, 3 elif i == 3 and x > 0: x, y = 0, y elif i == 4 and y > 0: x, y = x, 0 elif i == 5 and (x + y) >= 3 and y < 3: x, y = x + y - 3, 3 elif i == 6 and (x + y) >= 4 and x < 4: x, y = 4, x + y - 4 elif i == 7 and (x + y) <= 3 and x < 0: x, y = 0, x + y elif i == 8 and (x + y) <= 4 and y > 0: x, y = x + y, 0 if ( goal == (x, y) ): print("%s %d %d" % (str(j), x, y))
aa-11. パス,木,グラフ,探索,発見的探索
YouTube 動画: https://www.youtube.com/watch?v=72AKU8Nh8tY
この回で学ぶこと
- パス,木,グラフは,情報を見通し良く扱えるための考え方
- 総当たりはすべての経路(パス)を試すもの.経路 (パス)の情報を見通し良く扱うには,木が有効.
- 探索は,木の中のスタートの場所と,ゴールの状態 を指定して経路(パス)を探す.
- 探索は,正解に至る経路(パス)があるのであれば,必ず経路(パス)を見つけることができる.
- 探索には,種々の方法があるが,正解に至る経路(パス)があるのであれば,必ず経路(パス)を見つけることができることに変わりはない.
外部ページへのリンク(作者に感謝します).
- VisuAlgo の URL: https://visualgo.net/ja
最小全域木を選ぶ.全域木は,グラフの全ノードを網羅する木
- qito.github.io の URL: https://qiao.github.io/PathFinding.js/visual/
迷路作成,A* 法と総当たりでの迷路探索の違いを見る
- https://www.growingwiththeweb.com/projects/pathfinding-visualiser/
- パスと木
aa-12. プロダクションシステム、知識表現、推論
YouTube 動画: https://www.youtube.com/watch?v=72AKU8Nh8tY
この回で学ぶこと.
プロダクションシステム
- 作業領域
作業領域には「知識」のデータを置く。知識は、変化するものである。 知識は、次のような形で書くことができる。
['体毛', 'ある']
['肉食', 'する']
- 推論エンジン
ルールを用いて作業領域を変化させるという推論を行う
- ルール
ルールは既存の知識から新しい知識を生み出したり、知識を変化させるためのルールである。 次のように書くことができる。
'体毛' = 'ある'→ ['種類', '哺乳類']
'種類' = '哺乳類' and '肉食' = 'する' → ['種類', '肉食動物']
- 12-1. 知識表現
m = {'x': 0, 'y': 0} print(m)
- 12-2. 知識表現の例
m = {'taimou': True, 'nikusyoku': True} print(m)
- 12-3 プロダクションシステム
m = {'taimou': True, 'nikusyoku': True} def rule(m): changed = False if m['taimou'] == True: m['syurui'] = 'honyurui' changed = True if m['syurui'] == 'honyurui' and m['nikusyoku'] == True: m['syurui'] = 'nikusyokudoubutsu' changed = True print('----start----') print(m) while(True): if rule(m) != True: break print('----finished----') print(m)
- 12-4. 知識表現のバリエーション
m = {'ichiro': {'has': 'ball'}, 'jiro': {'has': 'none'}, 'saburo': {'has': 'none'}} print(m)
別のプログラム
m = {'ichiro': {'has': 'ball'}, 'jiro': {'has': 'none'}, 'saburo': {'has': 'none'}} def rule(m): changed = False if m['ichiro']['has'] == 'ball': m['ichiro']['has'] = 'none' m['jiro']['has'] = 'ball' changed = True return changed print('----start----') print(m) while(True): if rule(m) != True: break print('----finished----') print(m)
aa-13. 述語,Prolog
今回の授業で学ぶこと.
- 事実を述語の形で書くことができる.述語は,1項,あるいは,複数項の関係のこと
- john は男である
male(john). 1項
- mike は john の親である
parent(mike, john). 2項
複数項のときは,カンマで区切る
- john は男である
- 述語でのルールの例
X が Y の parent (親) ならば, Y は X の child (子供) である
child(Y, X) :- parent(X, Y).
X,Y は変数
- Prolog
Prolog では,問い合わせに対し事実との照合や推論を行う. 問い合わせでは, 値 false, trueを回答したり, 変数値 X = hanako, X = taro を回答する能力を持つ
aa-14. 自然言語処理,品詞,構文解析
この回で学ぶこと
- 自然言語処理
人間の言葉を、コンピュータが処理すること
- 自然言語処理の種類
- 単語の切り出し
- 品詞の判定
- 構文解析(係り受けなどの関係の分析)
- 意味解析
aa-15. 全体まとめ
Python プログラムのソースコードなど
- ニューラルネットワークを作るプログラム (Python)
import tensorflow as tf import keras from keras.models import Sequential m = Sequential() from keras.layers import Dense, Activation, Dropout import keras.optimizers m.add(Dense(units=64, activation='relu'))', input_dim=4)) m.add(Dense(units=3, activation='softmax'))')) m.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
ニューラルネットワークの確認表示 (Python)
print(m.summary())
ニューラルネットワークの学習を行うプログラム (Python)
import numpy as np x = np.array( [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 0], [0, 0, 1, 1], [0, 1, 0, 0], [0, 1, 0, 1], [0, 1, 1, 0], [0, 1, 1, 1], [1, 0, 0, 0], [1, 0, 0, 1], [1, 0, 1, 0], [1, 0, 1, 1], [1, 1, 0, 0], [1, 1, 0, 1], [1, 1, 1, 0], [1, 1, 1, 1]]) y = np.array( [0, 0, 0, 2, 0, 1, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0]) m.fit(x, keras.utils.to_categorical(y), epochs=500)
ニューラルネットワークによる分類 (Python)
m.predict( np.array([[0, 1, 0, 1]]) )
m.predict( np.array([[1, 0, 1, 0]]) )
m.predict( np.array([[1, 1, 0, 0]]) )
m.predict( np.array([[0, 0, 1, 1]]) )
第1層と第2層の間の結合の重みを表示 (Python)
m.get_weights()[2]
説明資料:
- 11. グラフと全域木
外部ページへのリンク(作者に感謝します).
- VisuAlgo の URL: https://visualgo.net/ja
最小全域木を選ぶ.全域木は,グラフの全ノードを網羅する木
- VisuAlgo の URL: https://visualgo.net/ja
- 11. A*法の実演(迷路作成,A*法と総当たりでの探索の違い)
外部ページへのリンク(作者に感謝します).
- qito.github.io の URL: https://qiao.github.io/PathFinding.js/visual/
迷路作成,A* 法と総当たりでの迷路探索の違いを見る
- https://www.growingwiththeweb.com/projects/pathfinding-visualiser/
- パスと木
GDB online: https://www.onlinegdb.com/
右上の「language」で「Python 3」を選ぶこと.
プログラムの実行開始は「Run」,実行停止は「Stop」
m = [['x', 0], [y', 0]] print(m)
- qito.github.io の URL: https://qiao.github.io/PathFinding.js/visual/
- 13. Prolog の実演
外部ページへのリンク(作者に感謝します).
- SWISH のページ: https://swish.swi-prolog.org/
Prolog プログラムのソースコード
human(hanako). human(taro). think(X) :- human(X).
- 13. Prolog の実演(true, false を得る問い合わせ)
外部ページへのリンク(作者に感謝します).
- SWISH のページ: https://swish.swi-prolog.org/
Prolog プログラムのソースコード
male(ali). female(zeyn). female(anne). parent(ali, anne). parent(zeyn, anne). child(Y, X) :- parent(X, Y).
- 15. 強化学習
強化学習により,コンピュータは,迷路からの脱出に上達する.
迷路は配列(アレイ)で作っている.サイズは 9 × 9. 値「1」は壁で,値「0」が通路.迷路の出口は,一番右下の「0」としている.
下のプログラムでは 200回の学習を繰り返している
強化学習による迷路脱出プログラム.「下に行くべき」のスコア算出 (Python)
import numpy as np from scipy import * import sys, time from pybrain.rl.environments.mazes import Maze, MDPMazeTask from pybrain.rl.learners.valuebased import ActionValueTable from pybrain.rl.agents import LearningAgent from pybrain.rl.learners import Q, SARSA from pybrain.rl.experiments import Experiment from pybrain.rl.environments import Task structure = array([[1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1]]) environment = Maze(structure, (7, 7)) controller = ActionValueTable(81, 4) controller.initialize(1.) learner = Q() agent = LearningAgent(controller, learner) task = MDPMazeTask(environment) experiment = Experiment(task, agent) for i in range(200): experiment.doInteractions(100) agent.learn() agent.reset() print( np.round( controller.params.reshape(81,4)[:,0].reshape(9,9), 2) )
強化学習による迷路脱出プログラム.「右に行くべき」のスコア算出
import numpy as np from scipy import * import sys, time from pybrain.rl.environments.mazes import Maze, MDPMazeTask from pybrain.rl.learners.valuebased import ActionValueTable from pybrain.rl.agents import LearningAgent from pybrain.rl.learners import Q, SARSA from pybrain.rl.experiments import Experiment from pybrain.rl.environments import Task structure = array([[1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0, 0, 1, 0, 0, 0, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 0, 1, 0, 1], [1, 0, 0, 1, 0, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 1, 0, 1], [1, 1, 1, 1, 1, 1, 1, 0, 1], [1, 0, 0, 0, 0, 0, 0, 0, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1]]) environment = Maze(structure, (7, 7)) controller = ActionValueTable(81, 4) controller.initialize(1.) learner = Q() agent = LearningAgent(controller, learner) task = MDPMazeTask(environment) experiment = Experiment(task, agent) for i in range(200): experiment.doInteractions(100) agent.learn() agent.reset() print( np.round( controller.params.reshape(81,4)[:,1].reshape(9,9), 2) )
人工知能デモサイトの紹介
- スタイル変換
- AutoDraw, https://www.autodraw.com/
- Variational AutoEncoder https://magenta.tensorflow.org/sketch-rnn-demo
- edges2cats: https://affinelayer.com/pixsrv/index.html
- 画像分類: https://clarifai.com/demo