renom.utility ¶
renom.utility.initializer ¶
-
class
renom.utility.initializer.
Initializer
( gain=1.0 ) ¶ -
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.
Constant
( value ) ¶
-
class
renom.utility.initializer.
GlorotUniform
( gain=1.0 ) ¶ -
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
( gain=1.0 ) ¶ -
Glorotの正規分布 "N(0, std)" に従って重みを初期化する.
\begin{split}&N(0, std) \\ &std = sqrt(2/(input\_size + output\_size)) \\\end{split}[GlorotRef] ( 1 , 2 ) Xavier Glorot, Yoshua Bengio. Understanding the difficulty of training deep feedforward neural networks.
-
class
renom.utility.initializer.
HeNormal
( gain=1.0 ) ¶ -
Heの正規分布によって重みパラメータを初期化する.
\begin{split}&N(0, std) \\ &std = sqrt(2/(input\_size)) \\\end{split}[HeNormRef] https://arxiv.org/abs/1502.01852 Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
-
class
renom.utility.initializer.
HeUniform
( gain=1.0 ) ¶ -
Heの一様分布によって重みパラメータを初期化する.
\begin{split}&U(max, min) \\ &max = sqrt(6/(input\_size)) \\ &min = -sqrt(6/(input\_size))\end{split}[HeUniformRef] https://arxiv.org/abs/1502.01852 Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification
-
class
renom.utility.initializer.
Gaussian
( mean=0.0 , std=0.1 , gain=1.0 ) ¶ -
ガウス分布 N(mean, std) に従って重みを初期化する.
パラメータ:
-
class
renom.utility.initializer.
Uniform
( min=-1.0 , max=1.0 , gain=1.0 ) ¶ -
一様分布 U(min, max) に従って重みを初期化する.
パラメータ:
-
class
renom.utility.initializer.
Orthogonal
( gain=1.0 ) ¶ -
直行化によって重みパラメータを初期化する.
[1] Andrew M. Saxe, James L. McClelland, Surya Ganguli https://arxiv.org/abs/1312.6120 Exact solutions to the nonlinear dynamics of learning in deep linear neural networks
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オブジェクトにセットする.
パラメータ:
-
-
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/
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数分実行します.
パラメータ: 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.gradient_clipping ¶
-
class
renom.utility.gradient_clipping.
GradientClipping
( threshold=0.5 , norm=2 ) ¶ -
このクラスは勾配をクリッピングするために使用する.
計算は下記のように実施される.
\begin{split}\begin{gather} \hat { g } \leftarrow \frac { \partial L }{ \partial \omega } \\ \text{ if } || \hat { g } ||_n \geq {\it threshold } \hspace{5pt} { \bf then } \\ \hat { g } \leftarrow \frac { threshold } { || \hat { g } ||_n } \hat { g } \\ \end{gather}\end{split}- L : 損失値
- \omega : 重み
- n : ノルム
パラメータ: 戻り値: 勾配ノルムの合計値
Examples
>>> from **** import GradientClipping >>> grad_clip = GradientClipping(threshold=0.5,norm=2) >>> >>> grad = loss.grad() >>> grad_clip(grad) >>> >>> grad.update(Sgd(lr=0.01))
References
Razvan Pascanu, Tomas Mikolov, Yoshua BengioOn the difficulty of training Recurrent Neural Networks
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 ) ¶ -
与えられたサイズのミニバッチを返す.
パラメータ:
-
class
renom.utility.distributor.distributor.
NdarrayDistributor
( x , y , **kwargs ) ¶ -
ndarray形式のデータを扱うためのDistributorの派生クラス.
パラメータ: - x ( ndarray ) -- 入力データ
- y ( ndarray ) -- 教師データ
-
class
renom.utility.distributor.distributor.
GPUDistributor
( x , y , **kwargs ) ¶ -
ndarray形式のデータを扱うためのDistributorの派生クラス.
パラメータ: - x ( ndarray ) -- 入力データ
- y ( ndarray ) -- 教師データ
renom.utility.distributor.imageloader ¶
-
class
renom.utility.distributor.imageloader.
ImageLoader
( batches , color='RGB' ) ¶ -
ImageLoaderは画像データをバッチで扱うためのジェネレータを提供する.ImageLoaderに対し, 画像へのパスをリストで与えることで, 指定されたバッチサイズ分のデータを生成する.
パラメータ: 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を使用する.
パラメータ:
-
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]])
パラメータ: 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
-
class
renom.utility.distributor.threadingdistributor.
ImageClassificationDistributor
( image_path_list , y_list=None , class_list=None , imsize=(360 , 360) , color='RGB' , augmentation=None ) ¶ -
クラスタリングのためのDistributorクラス.
パラメータ: 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
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.
パラメータ: -
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()
-
-
renom.utility.image
- renom.utility.image.data_augmentation.color_jitter
- renom.utility.image.data_augmentation.crop
- renom.utility.image.data_augmentation.flip
- renom.utility.image.data_augmentation.rescale
- renom.utility.image.data_augmentation.resize
- renom.utility.image.data_augmentation.rotate
- renom.utility.image.data_augmentation.shift
- renom.utility.image.data_augmentation.zoom