renom.utility

renom.utility.initializer

class renom.utility.initializer. Initializer

Initializerクラスの基底となるクラス.

Dense, Conv2dオブジェクトの重みパラメータを初期化する方法を提供する.

Example

>>> import renom as rm
>>> from renom.utility.initializer import GlorotUniform
>>>
>>> layer = rm.Dense(output_size=2, input_size=2, initializer=GlorotUniform())
>>> print(layer.params.w)
[[-0.55490332 -0.14323548]
 [ 0.00059367 -0.28777076]]
class renom.utility.initializer. GlorotUniform

Glorotの一様分布 “U(max, min)” に従って重みを初期化する.

\begin{split}&U(max, min) \\ &max = sqrt(6/(input\_size + output\_size)) \\ &min = -sqrt(6/(input\_size + output\_size))\end{split}
class renom.utility.initializer. GlorotNormal

Glorotの正規分布 “N(0, std)” に従って重みを初期化する.

\begin{split}&N(0, std) \\ &std = sqrt(2/(input\_size + output\_size)) \\\end{split}
[1] Xavier Glorot, Yoshua Bengio. Understanding the difficulty of training deep feedforward neural networks.
class renom.utility.initializer. Gaussian ( mean=0.0 , std=0.1 )

ガウス分布 N(mean, std) に従って重みを初期化する.

パラメタ:
  • mean ( float ) – ガウス分布の平均値
  • std ( float ) – ガウス分布の標準偏差
class renom.utility.initializer. Uniform ( min=-1.0 , max=1.0 )

ガウス分布 U(min, max) に従って重みを初期化する.

パラメタ:
  • min ( float ) – 一様分布の下限値
  • max ( float ) – 一様分布の上限値

renom.utility.searcher

class renom.utility.searcher. Searcher ( parameters )

Searcherクラスの基底となるクラス

Searcherクラスは誤差が低くなるようなモデルのハイパーパラメータを探索する機能を提供するクラス.

パラメタ: parameters ( dict ) – パラメータ名をキーとし, パラメータ空間を値として持つ辞書

Example

>>> import renom as rm
>>> from renom.utility.searchera import GridSearcher
>>> params = {
...     "p1":[1, 2, 3],
...     "p2":[4, 5, 6],
... }
...
>>> searcher = GridSearcher(params)
>>>
>>> for p in searcher.suggest():
...     searcher.set_result(p["p1"] + p["p2"])
...
>>> bests = searcher.best()
>>> for i in range(len(bests)):
... print("{}: parameter {} value {}".format(i+1, bests[i][0], bests[i][1]))
...
1: parameter {'p2': 4, 'p1': 1} value 5
2: parameter {'p2': 4, 'p1': 2} value 6
3: parameter {'p2': 5, 'p1': 1} value 6
set_result ( result , params=None )

ハイパーパラメータ ‘params’ によって得られたモデルの評価値をSearcherオブジェクトにセットする.

パラメタ:
  • result ( float ) – ハイパーパラメータによって得られた結果
  • params ( dict ) – 学習に使用したハイパーパラメータ. Noneが与えられた場合, ‘result’を, searcherが最後に出力したハイパーパラメータに対する評価値として扱う.
suggest ( max_iter )

次に調べるべきハイパーパラメータを返す.

パラメタ: max_iter ( int ) – 最大探索回数
Yields:

ハイパーパラメータを含む辞書

best ( num=3 )

最も低い評価値を得られたハイパーパラメータを返す.デフォルトでは低い順に三つのハイパーパラメータを返す.

パラメタ: num ( int ) – 返すハイパーパラメータセットの数
戻り値: ハイパーパラメータを含む辞書のリスト
戻り値の型: list
class renom.utility.searcher. GridSearcher ( parameters )

Grid searcher class.

グリッドサーチに基づいて, 誤差が低くなるようなハイパーパラメータを探索する.

パラメタ: parameters ( dict ) – パラメータ名をキーとし, パラメータ空間を値として持つ辞書
class renom.utility.searcher. RandomSearcher ( parameters )

Random searcher class.

パラメータ空間をランダムに探索し, 誤差が低くなるようなハイパーパラメータを探索する.

パラメタ: parameters ( dict ) – パラメータ名をキーとし, パラメータ空間を値として持つ辞書
class renom.utility.searcher. BayesSearcher ( parameters )

Bayes searcher class.

ベイズ最適化に基づいて誤差が低くなるようなハイパーパラメータを探索する.

パラメタ: parameters ( dict ) – パラメータ名をキーとし, パラメータ空間を値として持つ辞書

注釈

このクラスはGPy [1]_ ライブラリを必要とします. GPyは pip install gpy で インストールが可能です.

[1] GPy - Gaussian Process framework http://sheffieldml.github.io/GPy/
suggest ( max_iter=10 , random_iter=3 )
パラメタ:
  • max_iter ( int ) – 最大探索回数
  • random_iter ( int ) – ランダム探索の回数.

renom.utility.trainer

class renom.utility.trainer. Trainer ( model , num_epoch , loss_func , batch_size , optimizer=None , shuffle=True , events=None , num_gpu=1 )

Trainerクラス

このクラスは学習ループを提供します. 順伝播, 逆伝播, 重みパラメータの更新を指定されたepoch数分実行します.

パラメタ:
  • model ( Model ) – 学習対象のモデル
  • num_epoch ( int ) – epoch数
  • loss_func ( Node ) – 誤差関数
  • batch_size ( int ) – バッチサイズ
  • optimizer ( Optimizer ) – 勾配降下アルゴリズム
  • shuffle ( bool ) – 真の場合, ミニバッチを重複を許さずランダムに作成する
  • events ( dict ) – 関数を要素に持つ辞書

Example

>>> import numpy as np
>>> import renom as rm
>>> from renom.utility.trainer import Trainer
>>> from renom.utility.distributor import NdarrayDistributor
>>> x = np.random.rand(300, 50)
>>> y = np.random.rand(300, 1)
>>> model = rm.Dense(1)
>>> trainer = Trainer(model, 10, rm.mean_squared_error, 3, rm.Sgd(0.1))
>>> trainer.train(NdarrayDistributor(x, y))
epoch  0: avg loss 0.1597: 100%|██████████| 100/100.0 [00:00<00:00, 1167.85it/s]
epoch  1: avg loss 0.1131: 100%|██████████| 100/100.0 [00:00<00:00, 1439.25it/s]
epoch  2: avg loss 0.1053: 100%|██████████| 100/100.0 [00:00<00:00, 1413.42it/s]
epoch  3: avg loss 0.0965: 100%|██████████| 100/100.0 [00:00<00:00, 1388.67it/s]
epoch  4: avg loss 0.0812: 100%|██████████| 100/100.0 [00:00<00:00, 1445.61it/s]
epoch  5: avg loss 0.0937: 100%|██████████| 100/100.0 [00:00<00:00, 1432.99it/s]
epoch  6: avg loss 0.0891: 100%|██████████| 100/100.0 [00:00<00:00, 1454.68it/s]
epoch  7: avg loss 0.0992: 100%|██████████| 100/100.0 [00:00<00:00, 1405.73it/s]
epoch  8: avg loss 0.0933: 100%|██████████| 100/100.0 [00:00<00:00, 1401.55it/s]
epoch  9: avg loss 0.1090: 100%|██████████| 100/100.0 [00:00<00:00, 1343.97it/s]
train ( train_distributor , test_distributor=None )

学習を実行するメソッド. test_distributorが与えられた場合、validationエラーを計算します.

パラメタ:
  • train_distributor ( Distributor ) – 学習データを与えるためのDistributorオブジェクト
  • test_distributor ( Distributor ) – テストデータを与えるためのDistributorオブジェクト
test ( data )

順伝播のみを実行するメソッド.

パラメタ: data ( ndarray ) – 入力データ
戻り値: ndarray

renom.utility.distributor.distributor

class renom.utility.distributor.distributor. Distributor ( x=None , y=None , path=None , data_table=None )

Distributorベースクラス.

パラメタ:
  • x ( ndarray ) – 入力データ
  • y ( ndarray ) – 教師データ
  • path ( string ) – 入力データへのパス
>>> import numpy as np
>>> from renom.utility.distributor.distributor import NdarrayDistributor
>>> x = np.random.randn(100, 100)
>>> y = np.random.randn(100, 1)
>>> distributor = NdarrayDistributor(x, y)
>>> batch_x, batch_y = distributor.batch(10).next()
>>> batch_x.shape
(10, 100)
>>> batch_y.shape
(10, 1)
batch ( batch_size , shuffle=True )

与えられたサイズのミニバッチを返す.

パラメタ:
  • batch_size ( int ) – バッチサイズ
  • shuffle ( bool ) – Trueが与えられた場合, バッチは重複を許さずランダムに選択されたデータから作られる.
split ( ratio=0.8 , shuffle=True )

このメソッドはDistributor自身が持つデータを2分割し, それらを元に新たなDistributorを二つ作成する.

パラメタ:
  • ratio ( float ) – データを分割する比率
  • shuffle ( bool ) – Trueが与えられた場合, データは分割する前にシャッフルされる.
class renom.utility.distributor.distributor. NdarrayDistributor ( x , y , **kwargs )

ndarray形式のデータを扱うためのDistributorの派生クラス.

パラメタ:
  • x ( ndarray ) – 入力データ
  • y ( ndarray ) – 教師データ

renom.utility.distributor.imageloader

class renom.utility.distributor.imageloader. ImageLoader ( batches , color='RGB' )

ImageLoaderは画像データをバッチで扱うためのジェネレータを提供する.ImageLoaderに対し, 画像へのパスをリストで与えることで, 指定されたバッチサイズ分のデータを生成する.

パラメタ:
  • batches ( list ) – 画像へのパスのリスト
  • color ( str ) – 画像のカラーフォーマット

Example

>>> batches = [[('/data/file1.jpg', '/data/file2.jpg')], [('/data/file3.jpg', '/data/file4.jpg')] ]
>>> loader = ImageLoader(batches)
>>> for i, (x) in enumerate(dist.batch(2)):
...    print 'Batch', i

renom.utility.distributor.threadingdistributor

class renom.utility.distributor.threadingdistributor. ImageDistributor ( image_path_list , y_list=None , class_list=None , imsize=(32 , 32) , color='RGB' , augmentation=None )

画像ファイルを扱うDistributorクラスの基底クラス.学習の目的ごとに, 派生クラスであるImageDetectionDistributor, ImageClassificationDistributorを使用する.

パラメタ:
  • image_path_list ( list ) – 画像へのパスのリスト
  • y_list ( list ) – 画像それぞれに対する教師データのリスト.
  • class_list ( list ) – データセットに含まれるクラス名のリスト.
  • shuffle ( bool ) – 真の場合, epochごとにデータはシャッフルされる.
  • imsize ( tuple ) – 画像を指定されたサイズにリサイズする.
  • color ( str ) – 入力画像のカラーフォーマト.
  • augmentation ( function ) – データオーギュメンテーション設定.
class renom.utility.distributor.threadingdistributor. ImageDetectionDistributor ( image_path_list , y_list=None , class_list=None , imsize=(360 , 360) , color='RGB' , augmentation=None )

オブジェクト検出モデルを作成するためのDistributorを提供するクラス.教師データは バウンディングボックスとクラスラベルからなる.np.array([[center x, center y, x_top_left, height, 0, 0, 0, 1, 0]])

パラメタ:
  • image_path_list ( list ) – 画像ファイルへのパスリスト
  • y_list ( list ) – それぞれの画像に対する教師データのリスト.
  • class_list ( list ) – データセットに含まれるクラス名のリスト.
  • shuffle ( bool ) – 真の場合, epochごとにデータはシャッフルされる.
  • imsize ( tuple ) – 引数に指定されたサイズに画像がリサイズされる.
  • color ( str ) – 入力画像のカラーフォーマット.
  • augmentation ( function ) – オーギュメンテーションの設定
Example:
>>> from renom.utility.load.imageloader.threadingdistributor import ImageDetectionDistributor
>>> from renom.utility.image.data_augmentation import *
>>> datagenerator = DataAugmentation([
...     Flip(1),
...     Rotate(20),
...     Crop(size=(300, 300)),
...     Resize(size=(500, 500)),
...     Shift((20, 50)),
...     Color_jitter(v = (0.5, 2.0)),
...     Zoom(zoom_rate=(1.2, 2))
...     # Rescale(option='zero'),
... ], random = True)
>>> dist = ImageDetectionDistributor(x_list, y_list=y_list,
                                class_list=class_list,callback=datagenerator,
                                shuffle=True, imsize=(360, 360), color='RGB')
>>> for i, (x, y) in enumerate(dist.batch(32)):
...     print 'Batch', i
batch ( batch_size , shuffle )

バッチを返すgeneratorオブジェクト

パラメタ: batch_size ( int ) – バッチサイズ
戻り値: Images(4 dimension) of input data for Network. If including labels, return with transformed labels
戻り値の型: (ndarray)
class renom.utility.distributor.threadingdistributor. ImageClassificationDistributor ( image_path_list , y_list=None , class_list=None , imsize=(360 , 360) , color='RGB' , augmentation=None )

クラスタリングのためのDistributorクラス.

パラメタ:
  • image_path_list ( list ) – 画像ファイルへのパスリスト
  • y_list ( list ) – それぞれの画像に対する教師データのリスト.
  • class_list ( list ) – データセットに含まれるクラス名のリスト.
  • shuffle ( bool ) – 真の場合, epochごとにデータはシャッフルされる.
  • imsize ( tuple ) – 引数に指定されたサイズに画像がリサイズされる.
  • color ( str ) – 入力画像のカラーフォーマット.
  • augmentation – オーギュメンテーションの設定

Example

>>> from renom.utility.load.imageloader.threadingdistributor import ImageClassificationDistributor
>>> from renom.utility.image.data_augmentation import *
>>> datagenerator = DataAugmentation([
...     Flip(1),
...     Rotate(20),
...     Crop(size=(300, 300)),
...     Resize(size=(500, 500)),
...     Shift((20, 50)),
...     Color_jitter(v = (0.5, 2.0)),
...     Zoom(zoom_rate=(1.2, 2))
...     # Rescale(option='zero'),
... ], random = True)
>>> dist = ImageClassificationDistributor(x_list, y_list=y_list,
                                        class_list=class_list, callback=datagenerator,
                                        shuffle=True, imsize=(360, 360), color='RGB')
>>> for i, (x, y) in enumerate(dist.batch(32)):
...     print 'Batch', i
batch ( batch_size , shuffle )
パラメタ: batch_size ( int ) – バッチサイズ
戻り値: 4次元テンソルで表された入力画像データ.
戻り値の型: (ndarray)

renom.utility.image.data_augmentation.augmentation

class renom.utility.image.data_augmentation.augmentation. DataAugmentation ( converter_list , random=False )

画像データx, 教師データyともに, オーギュメンテーションを行う. 以下のオーギュメンテーションオプションを指定できる.[“Flip”, “Resize”, “Crop”, “Color_jitter”, “Rescale”, “Rotate”, “Shift”]. “Rotate” transform can’t apply label transformation. So when you want to use “Rotate”, Please use only image transformation.

パラメタ:
  • converter_list ( list ) – Resize, Flipなどのコンバーターインスタンスのリスト.
  • random ( bool ) – Trueが与えられた場合ランダムに画像変形を適用する.
create ( x , labels=None , num_class=0 )

画像に対しオーギュメンテーションを適用する.入力xが4次元テンソルである場合, 第一軸はバッチ数として認識され,バッチ内の各画像に対しオーギュメンテーションが適用される.教師データが同時に与えられていた場合, 教師データに対しても変形が行われる.

パラメタ:
  • x ( ndarray ) – 3, 4(第一軸はバッチ数)次元テンソルデータ.
  • labels ( ndarray ) – 教師データ.
  • num_class ( int ) – データセットに含まれるクラス数.
戻り値:

4次元テンソルで表された入力画像データ. 同時に教師ラベルが与えられた場合,オーギュメンテーションに対応して教師データは変形される.

戻り値の型:

(ndarray)

Example

>>> import matplotlib.pyplot as plt
>>> from PIL import Image as im
>>> from renom.utility.image.data_augmentation import *
>>> image = im.open("/Users/tsujiyuuki/env_python/code/my_code/Utilities/doc/img_autodoc/2007_000027.jpg")
>>> image = np.array(image, dtype=np.float32)
>>> datagenerator = DataAugmentation([
...     Flip(1),
...     Rotate(20),
...     Crop(size=(300, 300)),
...     Resize(size=(500, 500)),
...     Shift((20, 50)),
...     Color_jitter(v = (0.5, 2.0)),
...     Zoom(zoom_rate=(1.2, 2))
...     # Rescale(option='zero'),
... ], random = True)
>>> augment_image = datagenerator.create(image)
>>> fig, axes = plt.subplots(2, 1)
>>> axes[0].imshow(image/255); axes[0].set_title("Original Image")
>>> axes[1].imshow(augment_image[0] / 255); axes[1].set_title("Shift One Image")
>>> plt.show()