トップページ -> サポートページ -> 授業「人工知能」サポートページ
[サイトマップへ], [サイト内検索へ]

授業「人工知能」サポートページ

担当者: 金子邦彦

実習用のプログラムのソースコード

ルールのパスが [1, 2, 3, 4, 5, 6, 7, 8] のとき,状態がどう変化するかを調べるプログラム

import sys
x, y = 0, 0
path = [1, 2, 3, 4, 5, 6, 7, 8]
print("x = %d y = %d" % (x, y))
for i in path:
    if i == 1 and x < 5:
        x, y = 5, 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) >= 5 and x < 5:
        x, y = 5, x + y - 5
    elif i == 7 and (x + y) <= 3 and x < 0:
        x, y = 0, x + y
    elif i == 8 and (x + y) <= 5 and y > 0:
        x, y = x + y, 0
    print("rule %d: x = %d y = %d" % (i, x, y))

実習用のプログラムのソースコード

パスの長さ 3 で,総当りで調べるプログラム

import itertools
import sys
nsteps = 3
goal = (5, 1)
nums=[1,2,3,4,5,6,7,8]
for j in list(itertools.product(nums, repeat=nsteps)):
    x, y = 0, 0
    for i in j:
        if i == 1 and x < 5:
            x, y = 5, 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) >= 5 and x < 5:
            x, y = 5, x + y - 5
        elif i == 7 and (x + y) <= 3 and x < 0:
            x, y = 0, x + y
        elif i == 8 and (x + y) <= 5 and y > 0:
            x, y = x + y, 0
    if ( goal == (x, y) ): 
        print("%s %d %d" % (str(j), x, y))

実習用のプログラムのソースコード

m = [{"name": "ichiro", "has": "ticket", "is": "nil"},
     {"name": "jiro", "has": "pen", "is": "nil"},
     {"name": "saburo", "has": "book", "is": "nil"}]

for i in m:
    if i['has'] == 'ticket':
        i['is'] = 'happy'

print(m)

実習用のプログラムのソースコード

m = [{"sky": "bright", "day_or_noon": "nil", "is_free": "yes", "action": "nil"}]

for i in m:
    if i['sky'] == 'bright':
        i['day_or_noon'] = 'day'
    if i['day_or_noon'] == 'day' and i['is_free'] == 'yes':
        i['action'] = 'outdoor'

print(m)

第13回授業

人工知能に関するトピックス説明と,調べ学習の回.パソコン演習なし

第12回授業

問題集と回答例を配布: ワードファイル

遺伝的アルゴリズム.デモサイト

http://math.hws.edu/eck/js/genetic-algorithm/GA.html

第11回授業

11-1. Python の配列(アレイ)と画像データセット

TensorFlow のデータセットとして,音声,画像,テキスト,ビデオのデータが多数公開されており,訓練(学習)に利用できる

https://github.com/tensorflow/datasets

(1) 画像データセット MNIST を準備

変数 X_train: サイズ 28 × 28 の 60000枚の濃淡画像

変数 y_train: 60000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)

変数 X_test: サイズ 28 × 28 の 10000枚の濃淡画像

変数 y_test: 10000枚の濃淡画像それぞれの,種類番号(0 から 9 のどれか)

from keras.datasets import mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()

(2) 「サイズ 28 × 28 の 60000枚の濃淡画像」の形と次元を確認するプログラム

配列(アレイ)の形: 60000×28×28

次元: 3

print( X_train.shape )
print( X_train.ndim )

(3) ニューラルネットワークを使うために,データの形などを調整

など

import tensorflow as tf
import keras
X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
X_train = X_train.astype('float32') / 255.0
X_test = X_test.astype('float32') / 255.0
print( X_train.shape )
print( X_train.ndim )

(4) ニューラルネットワークを作るプログラム

2層のニューラルネットワークを作成

1層目:ユニット数は 64

2層目:ユニット数は 10

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=tf.nn.relu))', input_dim=784))
m.add(Dropout(rate=0.2))
m.add(Dense(units=10, activation=tf.nn.softmax))'))
m.compile(loss=keras.losses.categorical_crossentropy,
          optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))

(5) ニューラルネットワークの確認表示

print(m.summary())

(6) ニューラルネットワークの学習を行うプログラム

m.fit(X_train, keras.utils.to_categorical(y_train, 10), epochs=50)
print( m.evaluate(X_test, y_test) )
print( m.evaluate(X_test, y_test) )

テスト画像を,ニューラルネットワークに与えて,予測させる

predictions = m.predict( X_test )
print( predictions[0] )

(8) 正解表示

テスト画像 0 番の正解を表示

print( y_test[0] )

11-2. 強化学習

謝辞:http://pybrain.org/docs/tutorial/reinforcement-learning.html のサンプルプログラムを使用

強化学習により,コンピュータは,迷路からの脱出に上達する.

迷路は配列(アレイ)で作っている.サイズは 9 × 9. 値「1」は壁で,値「0」が通路.迷路の出口は,一番右下の「0」としている.

下のプログラムでは 200回の学習を繰り返している

(1) 強化学習による迷路脱出プログラム.「下に行くべき」のスコア算出

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) )

(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) )

11-3. 最適化

謝辞:https://docs.scipy.org/doc/scipy/reference/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)

第10回授業

10-2. ニューラルネットワークを作るプログラム

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=tf.nn.relu))', input_dim=4))
m.add(Dense(units=3, activation=tf.nn.softmax))'))
m.compile(loss=keras.losses.categorical_crossentropy,
          optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))

ニューラルネットワークの確認表示

print(m.summary())

10-3. ニューラルネットワークの学習を行うプログラム

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)

10-4. ニューラルネットワークを使ってみる

m.predict( np.array([[0, 1, 0, 1]]) )

第1層と第2層の間の結合の重みを表示

m.get_weights()[2]

10-5. 実習課題

m.predict( np.array([[1, 0, 1, 0]]) )
m.predict( np.array([[1, 1, 0, 0]]) )
m.predict( np.array([[0, 0, 1, 1]]) )

説明資料: 第7回資料 [PDF], [パワーポイント],

第7回授業

7-1. 人工知能デモサイト

7-2. 述語

説明資料: 第7回資料 [PDF], [パワーポイント],

第6回授業

6-1. 人工知能デモサイト

第5回授業

オンラインサービス: https://paiza.io/ を利用

説明資料: 第5回資料 [PDF], [パワーポイント],


第4回授業

第3回授業


第2回授業

説明資料: 第2回資料 [PDF], [パワーポイント],


第1回授業

説明資料(短縮版): 人工知能とは何か、人工知能で我々の暮らしはどのように変わるのか [PDF], [パワーポイント],

※ 授業の資料を短縮したものを公開している


本サイトは金子邦彦研究室のWebページです.サイトマップは,サイトマップのページをご覧下さい. 本サイト内の検索は,サイト内検索のページをご利用下さい.

問い合わせ先: 金子邦彦(かねこ くにひこ) [image]