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 ) -- パラメータ名をキーとし, パラメータ空間を値として持つ辞書
suggest ( )

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

パラメータ: max_iter ( int ) -- 最大探索回数
Yields: ハイパーパラメータを含む辞書
class renom.utility.searcher. RandomSearcher ( parameters )

Random searcher class.

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

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

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

パラメータ: max_iter ( int ) -- 最大探索回数
Yields: ハイパーパラメータを含む辞書
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 , regularization=None )

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 , steps=None )

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

パラメータ:
  • 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 ) -- 教師データ
class renom.utility.distributor.distributor. GPUDistributor ( x , y , **kwargs )

Derived class of Distributor which manages GPUValue data.

パラメータ:
  • x ( ndarray ) -- 入力データ
  • y ( ndarray ) -- 教師データ
batch ( batch_size , shuffle=True , steps=None )

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

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

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