pytoolkit package

Subpackages

Submodules

pytoolkit.autoaugment module

AutoAugment <https://arxiv.org/abs/1805.09501>らしきもの。

<https://github.com/tensorflow/models/tree/master/research/autoaugment>

class pytoolkit.autoaugment.CIFAR10Policy(p=1)[ソース]

ベースクラス: albumentations.core.composition.OneOf

AutoAugment <https://arxiv.org/abs/1805.09501>のCIFAR-10用。

get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.SVHNPolicy(p=1)[ソース]

ベースクラス: albumentations.core.composition.OneOf

AutoAugment <https://arxiv.org/abs/1805.09501>のSVHN用。

get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.ImageNetPolicy(p=1)[ソース]

ベースクラス: albumentations.core.composition.OneOf

AutoAugment <https://arxiv.org/abs/1805.09501>のImageNet用。

get_transform_init_args_names()[ソース]
pytoolkit.autoaugment.subpolicy(a1, p1, mag1, a2, p2, mag2)[ソース]

サブポリシー。

class pytoolkit.autoaugment.Affine(shear_x_mag=0, shear_y_mag=0, translate_x_mag=0, translate_y_mag=0, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

Affine変換。

TODO: 物体検出とかへの対応。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.ShearX(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: pytoolkit.autoaugment.Affine

せん断。

get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.ShearY(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: pytoolkit.autoaugment.Affine

せん断。

get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.TranslateX(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: pytoolkit.autoaugment.Affine

移動。

get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.TranslateY(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: pytoolkit.autoaugment.Affine

移動。

get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Rotate(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

回転。

TODO: maskとかへの対応。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.AutoContrast(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageOps.autocontrastなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Invert(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageOps.equalizeなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Equalize(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageOps.equalizeなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Solarize(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageOps.solarizeなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Posterize(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageOps.posterizeなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Contrast(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageEnhance.ContrastなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Color(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageEnhance.ColorなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Brightness(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageEnhance.BrightnessなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.autoaugment.Sharpness(mag, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

PIL.ImageEnhance.SharpnessなTransform

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
pytoolkit.autoaugment.to_pillow(image)[ソース]

ndarrayからPIL.Imageへの変換。

パラメータ

image (numpy.ndarray) --

戻り値の型

<module 'PIL.Image' from '/home/docs/checkouts/readthedocs.org/user_builds/ak110-pytoolkit/envs/latest/lib/python3.8/site-packages/PIL/Image.py'>

pytoolkit.autoaugment.float_parameter(level, maxval, flip_sign=False)[ソース]

0~maxvalへの変換。

パラメータ
  • level (int) --

  • maxval (float) --

  • flip_sign (bool) --

戻り値の型

float

pytoolkit.autoaugment.int_parameter(level, maxval, flip_sign=False)[ソース]

0~maxvalへの変換。

パラメータ
  • level (int) --

  • maxval (int) --

  • flip_sign (bool) --

戻り値の型

int

pytoolkit.backend module

TensorFlowの基礎的な関数。

pytoolkit.backend.name_scope(f)[ソース]

tf.name_scopeで囲むデコレーター。

pytoolkit.backend.clip64(x, epsilon=1e-07)[ソース]

float64にキャストして[epsilon, 1 - epsilon]にclip。

pytoolkit.backend.logit(x, epsilon=1e-07)[ソース]

ロジット関数。シグモイド関数の逆関数。

logit(x) = log(x / (1 - x)) なのだが、 1 - xのところがx ≒ 1のとき桁落ちするのでfloat64で計算する。

pytoolkit.backend.lovasz_weights(y_true, perm, alpha=None)[ソース]

Lovasz hingeなどの損失の重み付け部分。

pytoolkit.backend.logcosh(x)[ソース]

log(cosh(x))。Smooth L1 lossみたいなもの。

pytoolkit.backend.log_softmax(x, axis=- 1)[ソース]

log(softmax(x))

pytoolkit.backend.reduce_mask(x, mask, axis)[ソース]

加重平均。reduce_sum(x * mask, axis) / reduce_sum(mask, axis)

パラメータ
  • x (tensorflow.python.framework.ops.Tensor) --

  • mask (tensorflow.python.framework.ops.Tensor) --

  • axis (Sequence[int]) --

pytoolkit.backend.reduce_losses(losses)[ソース]

1次元のtensorを複数受け取り、0次元のtensorを1つ返す。Endpointレイヤー作るとき用。

パラメータ

losses (Sequence[tensorflow.python.framework.ops.Tensor]) --

pytoolkit.cache module

キャッシュ関連。

pytoolkit.cache.memoize(cache_dir='./cache', prefix='', compress=0)[ソース]

関数の戻り値をファイルにキャッシュするデコレーター。

パラメータ
  • cache_dir (Optional[Union[str, os.PathLike]]) -- 保存先ディレクトリ。Noneならキャッシュしない。

  • prefix (str) -- キャッシュファイル名のプレフィクス (同名関数の衝突を避ける用)

  • compress (int) -- 0~9の圧縮レベル。一般的には3がおすすめ。

pytoolkit.cache.memoized_call(func, cache_path, compress=0)[ソース]

キャッシュがあれば読み、無ければ実処理してキャッシュとして保存する。

パラメータ
  • func (Callable[[], pytoolkit.cache.T]) -- 実処理

  • cache_path (Optional[Union[str, os.PathLike]]) -- キャッシュの保存先パス。Noneならキャッシュしない。

  • compress (int) -- 0~9の圧縮レベル。一般的には3がおすすめ。

戻り値の型

pytoolkit.cache.T

pytoolkit.cache.get_cache_path(cache_dir, func, args, kwargs, prefix='')[ソース]

キャッシュのパスを作って返す。

パラメータ
  • cache_dir (Union[str, os.PathLike]) --

  • func (Callable[[...], Any]) --

  • args (Sequence[Any]) --

  • kwargs (Dict[str, Any]) --

  • prefix (str) --

戻り値の型

pathlib.Path

pytoolkit.callbacks module

DeepLearning(主にKeras)関連。

class pytoolkit.callbacks.LearningRateStepDecay(reduce_epoch_rates=(0.5, 0.75), factor=0.1, epochs=None)[ソース]

ベースクラス: tensorflow.python.keras.callbacks.Callback

よくある150epoch目と225epoch目に学習率を1/10するコールバック。

on_train_begin(logs=None)[ソース]

Called at the beginning of training.

Subclasses should override for any actions to run.

パラメータ

logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

on_epoch_begin(epoch, logs=None)[ソース]

Called at the start of an epoch.

Subclasses should override for any actions to run. This function should only be called during TRAIN mode.

パラメータ
  • epoch -- Integer, index of epoch.

  • logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

on_train_end(logs=None)[ソース]

Called at the end of training.

Subclasses should override for any actions to run.

パラメータ

logs -- Dict. Currently the output of the last call to on_epoch_end() is passed to this argument for this method but that may change in the future.

class pytoolkit.callbacks.CosineAnnealing(factor=0.01, epochs=None, warmup_epochs=5, warmup_reset_state=True)[ソース]

ベースクラス: tensorflow.python.keras.callbacks.Callback

Cosine Annealing without restart。

参照

on_train_begin(logs=None)[ソース]

Called at the beginning of training.

Subclasses should override for any actions to run.

パラメータ

logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

on_epoch_begin(epoch, logs=None)[ソース]

Called at the start of an epoch.

Subclasses should override for any actions to run. This function should only be called during TRAIN mode.

パラメータ
  • epoch -- Integer, index of epoch.

  • logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

on_train_end(logs=None)[ソース]

Called at the end of training.

Subclasses should override for any actions to run.

パラメータ

logs -- Dict. Currently the output of the last call to on_epoch_end() is passed to this argument for this method but that may change in the future.

class pytoolkit.callbacks.EpochLogger(enabled=None)[ソース]

ベースクラス: tensorflow.python.keras.callbacks.Callback

DEBUGログを色々出力するcallback。Horovod使用時はrank() == 0のみ有効。

on_train_begin(logs=None)[ソース]

Called at the beginning of training.

Subclasses should override for any actions to run.

パラメータ

logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

on_epoch_begin(epoch, logs=None)[ソース]

Called at the start of an epoch.

Subclasses should override for any actions to run. This function should only be called during TRAIN mode.

パラメータ
  • epoch -- Integer, index of epoch.

  • logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

on_epoch_end(epoch, logs=None)[ソース]

Called at the end of an epoch.

Subclasses should override for any actions to run. This function should only be called during TRAIN mode.

パラメータ
  • epoch -- Integer, index of epoch.

  • logs --

    Dict, metric results for this training epoch, and for the

    validation epoch if validation is performed. Validation result keys are prefixed with val_. For training epoch, the values of the

    Model's metrics are returned. Example`{'loss': 0.2, 'accuracy':

    0.7}`.

class pytoolkit.callbacks.Checkpoint(checkpoint_path, checkpoints=3)[ソース]

ベースクラス: tensorflow.python.keras.callbacks.Callback

学習中に定期的に保存する。

速度重視でinclude_optimizerはFalse固定。

パラメータ
  • checkpoint_path -- 保存先パス

  • checkpoints -- 保存する回数。epochs % (checkpoints + 1) == 0だとキリのいい感じになる。

on_train_begin(logs=None)[ソース]

Called at the beginning of training.

Subclasses should override for any actions to run.

パラメータ

logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

on_epoch_begin(epoch, logs=None)[ソース]

Called at the start of an epoch.

Subclasses should override for any actions to run. This function should only be called during TRAIN mode.

パラメータ
  • epoch -- Integer, index of epoch.

  • logs -- Dict. Currently no data is passed to this argument for this method but that may change in the future.

class pytoolkit.callbacks.ErrorOnNaN(save_path=None)[ソース]

ベースクラス: tensorflow.python.keras.callbacks.Callback

NaNやinfで異常終了させる。

on_batch_end(batch, logs=None)[ソース]

A backwards compatibility alias for on_train_batch_end.

pytoolkit.cli module

CLI関連。

class pytoolkit.cli.App(output_dir, use_horovod=False, distribute_strategy_fn=None)[ソース]

ベースクラス: object

MLコンペとか用簡易フレームワーク。

ログの初期化とかのボイラープレートコードを出来るだけ排除するためのもの。

パラメータ
  • output_dir (typing.Union[tk.typing.PathLike, None]) -- ログ出力先ディレクトリ

  • use_horovod (bool) -- horovodを使うならTrue (全コマンドの既定値)

  • distribute_strategy_fn (typing.Callable[[], tf.distribute.Strategy]) -- tf.distributeを使う場合のStrategyの作成関数 (全コマンドの既定値)

output_dir[ソース]

ログ出力先ディレクトリ

current_command[ソース]

現在実行中のコマンド名

例:

@app.command()
def train():
    ...

./xxx.py train でtrain関数が呼ばれる。サブコマンド名は関数名(ただし_は-に置き換えたもの)。

init()[ソース]

前処理の追加用デコレーター。

他のデコレーターと共用する場合は一番上に付ける必要あり。(下から順に適用されるため)

term()[ソース]

後処理の追加用デコレーター。

他のデコレーターと共用する場合は一番上に付ける必要あり。(下から順に適用されるため)

command(logfile=True, then=None, use_horovod=None, distribute_strategy_fn=None, args=None)[ソース]

コマンドの追加用デコレーター。

パラメータ
  • logfile (bool) -- ログファイルを出力するのか否か

  • then (Optional[str]) -- 当該コマンドが終わった後に続けて実行するコマンドの名前

  • use_horovod (Optional[bool]) -- horovodを使うならTrue

  • distribute_strategy_fn (Optional[Callable[[], tensorflow.python.distribute.distribute_lib.Strategy]]) -- tf.distributeを使う場合のStrategyの作成関数

  • args (Optional[Dict[str, Dict[str, Any]]]) -- add_argumentの引数。(例: args={"--x": {"type": int}})

他のデコレーターと共用する場合は一番上に付ける必要あり。(下から順に適用されるため)

run(args=None, default=None)[ソース]

実行。

パラメータ
  • args (Optional[Sequence[str]]) -- 引数。(既定値はsys.argv)

  • default (Optional[str]) -- 未指定時に実行するコマンド名 (既定値は先頭のコマンド)

戻り値の型

None

property num_replicas_in_sync: int[ソース]

現在のコマンドのdistribute_strategy.num_replicas_in_syncを取得する。

property num_workers[ソース]

Horovodとtf.distributeの両方を考慮したワーカー数を返す。

class pytoolkit.cli.Command(name, entrypoint, logfile=True, then=None, use_horovod=False, distribute_strategy_fn=None, distribute_strategy=None, args=None)[ソース]

ベースクラス: object

コマンド。

パラメータ
  • name (str) -- コマンド名

  • entrypoint (Callable[[...], None]) -- 呼び出される関数

  • logfile (bool) -- ログファイルを出力するのか否か

  • then (Optional[str]) -- 当該コマンドが終わった後に続けて実行するコマンドの名前

  • use_horovod (bool) -- horovodを使うならTrue

  • distribute_strategy_fn (Optional[Callable[[], tensorflow.python.distribute.distribute_lib.Strategy]]) -- tf.distributeを使う場合のStrategyの作成関数

  • distribute_strategy (Optional[tensorflow.python.distribute.distribute_lib.Strategy]) -- 作成したStrategy

  • args (Optional[Dict[str, Dict[str, Any]]]) -- add_argumentの引数。(例: args={"--x": {"type": int}})

戻り値の型

None

name: str[ソース]
entrypoint: Callable[[...], None][ソース]
logfile: bool = True[ソース]
then: Optional[str] = None[ソース]
use_horovod: bool = False[ソース]
distribute_strategy_fn: Optional[Callable[], tensorflow.python.distribute.distribute_lib.Strategy]] = None[ソース]
distribute_strategy: Optional[tensorflow.python.distribute.distribute_lib.Strategy] = None[ソース]
args: Optional[Dict[str, Dict[str, Any]]] = None[ソース]
run(kwargs)[ソース]

コマンドの実行。

戻り値の型

None

pytoolkit.constraints module

制約。

class pytoolkit.constraints.GreaterThanOrEqualTo(value, **kwargs)[ソース]

ベースクラス: tensorflow.python.keras.constraints.Constraint

指定した値以上に制約する。

get_config()[ソース]

Returns a Python dict of the object config.

A constraint config is a Python dictionary (JSON-serializable) that can be used to reinstantiate the same object.

戻り値

Python dict containing the configuration of the constraint object.

class pytoolkit.constraints.Clip(min_value, max_value, **kwargs)[ソース]

ベースクラス: tensorflow.python.keras.constraints.Constraint

指定した値の範囲に制約する。

get_config()[ソース]

Returns a Python dict of the object config.

A constraint config is a Python dictionary (JSON-serializable) that can be used to reinstantiate the same object.

戻り値

Python dict containing the configuration of the constraint object.

pytoolkit.data module

学習時のデータの読み込み周り。

dataset: dataの集合 data: 1件のデータ sample: 学習時に使用する1件のデータ (1件以上のdataから作られるもの) (という事にしている) batch: sampleのバッチサイズ個の集合

class pytoolkit.data.Dataset(data, labels=None, groups=None, weights=None, ids=None, init_score=None, metadata=<factory>)[ソース]

ベースクラス: object

訓練データなど。

パラメータ
  • data (Union[Sequence[Any], pandas.core.frame.DataFrame, dict]) -- 入力データ

  • labels (Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]) -- ラベル

  • groups (numpy.ndarray) -- グループID

  • weights (numpy.ndarray) -- サンプルごとの重み

  • ids (numpy.ndarray) -- ID (入力データにしないIDが別途必要な場合用)

  • init_score (numpy.ndarray) -- LightGBMなど用。boostingのベーススコア。

  • metadata (Dict[str, Any]) -- メタデータ。色々独自に入れておいてOK。 sliceとかではそのままコピーされたりするので注意。

戻り値の型

None

data: Union[Sequence[Any], pandas.core.frame.DataFrame, dict][ソース]
labels: Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]] = None[ソース]
groups: numpy.ndarray = None[ソース]
weights: numpy.ndarray = None[ソース]
ids: numpy.ndarray = None[ソース]
init_score: numpy.ndarray = None[ソース]
metadata: Dict[str, Any][ソース]
__len__()[ソース]

データ件数を返す。

戻り値の型

int

get_data(index)[ソース]

dataとlabelを返す。

パラメータ

index (int) --

戻り値の型

Tuple[Any, Any]

iter(folds)[ソース]

foldsに従って分割する。

パラメータ

folds (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) --

戻り値の型

Generator[Tuple[pytoolkit.data.Dataset, pytoolkit.data.Dataset], None, None]

slice(rindex)[ソース]

スライスを作成して返す。

パラメータ

rindex (Sequence[int]) -- インデックスの配列

戻り値

スライス後のDataset

戻り値の型

pytoolkit.data.Dataset

copy()[ソース]

コピーを作成して返す。

戻り値

コピー

戻り値の型

pytoolkit.data.Dataset

classmethod concat(dataset1, dataset2)[ソース]

Dataset同士のconcat。

戻り値の型

pytoolkit.data.Dataset

classmethod slice_field(d, rindex)[ソース]

値のスライスを作成して返す。

パラメータ

rindex (Sequence[int]) --

classmethod copy_field(d)[ソース]

値のコピーを作成して返す。

classmethod concat_field(a, b)[ソース]

2個の値のconcat。

pytoolkit.data.split(dataset, count, shuffle=False)[ソース]

Datasetを指定個数に分割する。

パラメータ
class pytoolkit.data.DataLoader(batch_size=16, data_per_sample=1, parallel=True, num_replicas_in_sync=None)[ソース]

ベースクラス: object

データをモデルに渡す処理をするクラス。

継承してカスタマイズする。ここでData Augmentationとかをする。

パラメータ
  • batch_size (int) -- バッチサイズ

  • data_per_sample (int) -- sampleあたりのデータ数。mixupとかするなら2にする。

  • parallel (bool) -- self.get_dataの呼び出しを並列化するか否か。

  • num_replicas_in_sync (int) -- tf.distribute.Strategy.num_replicas_in_syncの値。

load(dataset)[ソース]

データを読み込んだことにする。

パラメータ

dataset (pytoolkit.data.Dataset) --

戻り値の型

pytoolkit.data.Iterator

get_ds(dataset, shuffle=False, without_label=False)[ソース]

tf.data.Datasetを作る。

パラメータ
  • dataset (pytoolkit.data.Dataset) -- データセット

  • shuffle (bool) -- シャッフルするのか否か

  • without_label (bool) -- ラベルを使わない場合(predict)、Trueを指定する。

戻り値

tf.data.Datasetと1epochあたりのステップ数のタプル

戻り値の型

Tuple[tensorflow.python.data.ops.dataset_ops.DatasetV2, int]

get_sample(data)[ソース]

1件のサンプルを取得する。

get_data(dataset, index)[ソース]

1件のデータを取得する。

パラメータ
  • dataset (pytoolkit.data.Dataset) -- データセット

  • batch -- Datasetが返したデータをバッチサイズ分集めたもの

  • index (int) --

戻り値

1件のデータ。通常は入力データとラベルのtuple。

class pytoolkit.data.Iterator(data_loader, dataset)[ソース]

ベースクラス: object

Dataset+DataLoaderをtk.modelsに渡すためのクラス。

パラメータ
戻り値の型

None

data_loader: pytoolkit.data.DataLoader[ソース]
dataset: pytoolkit.data.Dataset[ソース]
__len__()[ソース]

データ数を返す。

戻り値の型

int

pytoolkit.data.mixup(ds, postmix_fn=None, num_parallel_calls=None)[ソース]

tf.dataでのmixup: <https://arxiv.org/abs/1710.09412>

パラメータ
  • ds (tensorflow.python.data.ops.dataset_ops.DatasetV2) -- 元のデータセット

  • postmix_fn (Optional[Callable[[...], Any]]) -- mixup後の処理

  • num_parallel_calls (Optional[int]) -- premix_fnの並列数

pytoolkit.dl module

DeepLearning(主にKeras)関連。

pytoolkit.dl.get_gpu_count()[ソース]

GPU数の取得。

pytoolkit.dl.nvidia_smi(*args)[ソース]

nvidia-smiコマンドを実行する。

pytoolkit.exp module

実験結果の管理。

class pytoolkit.exp.ExperimentLogger(output_dir, name=None, precision=3)[ソース]

ベースクラス: object

実験結果のログを管理するクラス。

パラメータ
  • output_dir (tk.typing.PathLike) -- 出力先ディレクトリ

  • name (str) -- 実験名とかメモ的なもの

  • precision (int) -- ログ出力時の小数点以下の桁数

add(evals)[ソース]

ログ出力。

パラメータ

evals (Dict[str, Any]) --

pytoolkit.hpo module

Optuna関連など。

pytoolkit.hpo.optimize(params_fn, score_fn, storage=None, sampler=None, pruner=None, study_name=None, direction='minimize', load_if_exists=False, n_trials=None, timeout=None, n_jobs=1, catch=(<class 'Exception'>, ))[ソース]

Optunaの簡易ラッパー。

パラメータ
  • params_fn (typing.Callable[[optuna.trial.BaseTrial], typing.Any]) -- trialを受け取り、dictなどを返す関数。

  • score_fn (typing.Callable[..., float]) -- params_fnの結果と、trial(省略可)を受け取り、スコアを返す関数。 (trialを受け取りたい場合は引数名は必ず`trial`にする。)

  • storage -- optuna.create_studyの引数

  • sampler -- optuna.create_studyの引数

  • pruner -- optuna.create_studyの引数

  • study_name -- optuna.create_studyの引数

  • direction -- optuna.create_studyの引数

  • load_if_exists -- optuna.create_studyの引数

  • n_trials -- study.optimizeの引数

  • timeout -- study.optimizeの引数

  • n_jobs -- study.optimizeの引数

  • catch -- study.optimizeの引数

戻り値

study object

戻り値の型

optuna.study.Study

suggest_*メモ:
  • trial.suggest_categorical(name, choices)

  • trial.suggest_discrete_uniform(name, low, high, q)

  • trial.suggest_float(name, low, high, step=None, log=False) # [low, high]

  • trial.suggest_int(name, low, high, step=1, log=False) # [low, high]

  • trial.suggest_loguniform(name, low, high) # [low,high)

  • trial.suggest_uniform(name, low, high) # [low,high)

参照

pytoolkit.hpo.raise_pruned()[ソース]

raise optuna.exceptions.TrialPruned() する。(params_fn/score_fnから呼び出す用)

戻り値の型

NoReturn

pytoolkit.hpo.get_best_params(study, params_fn=None)[ソース]

見つけた中で最善のパラメータを返す。

パラメータ
  • study (optuna.study.Study) --

  • params_fn (typing.Callable[[optuna.trial.BaseTrial], typing.Any]) --

戻り値の型

typing.Dict[str, float]

pytoolkit.hvd module

Horovodの薄いwrapper。

pytoolkit.hvd.get()[ソース]

horovod.tf.kerasモジュールを返す。

pytoolkit.hvd.init()[ソース]

初期化。

戻り値の型

None

pytoolkit.hvd.initialized()[ソース]

初期化済みなのか否か(Horovodを使うのか否か)

戻り値の型

bool

pytoolkit.hvd.is_active()[ソース]

初期化済みかつsize() > 1ならTrue。

戻り値の型

bool

pytoolkit.hvd.size()[ソース]

hvd.size。

戻り値の型

int

pytoolkit.hvd.rank()[ソース]

hvd.rank。

戻り値の型

int

pytoolkit.hvd.local_rank()[ソース]

hvd.local_rank。

戻り値の型

int

pytoolkit.hvd.is_master()[ソース]

Horovod未使用 or hvd.rank() == 0ならTrue。

戻り値の型

bool

pytoolkit.hvd.is_local_master()[ソース]

Horovod未使用 or hvd.local_rank() == 0ならTrue。

戻り値の型

bool

pytoolkit.hvd.allgather(value)[ソース]

全ワーカーからデータを集める。

pytoolkit.hvd.allreduce(value, op='average')[ソース]

全ワーカーからデータを集める。opはaverage, sum, adasum

パラメータ

op (str) --

pytoolkit.hvd.barrier()[ソース]

全員が揃うまで待つ。

戻り値の型

None

pytoolkit.hvd.bcast(buf, root=0)[ソース]

MPI_Bcastを呼び出す。

pytoolkit.hvd.get_file(name, url, **kwargs)[ソース]

local_masterだけtf.keras.utils.get_fileを呼び出す。

戻り値の型

str

pytoolkit.hvd.split(dataset)[ソース]

Datasetを各ワーカーで分割処理する。

処理結果は hvd.allgather() や hvd.allreduce() で集めることができる。

パラメータ

dataset (pytoolkit.data.Dataset) -- 分割元のデータセット

戻り値

分割後のデータセット

戻り値の型

pytoolkit.data.Dataset

pytoolkit.image module

画像処理関連。

class pytoolkit.image.RandomCompose(transforms, bbox_params=None, keypoint_params=None, additional_targets=None, p=1.0)[ソース]

ベースクラス: albumentations.core.composition.Compose

シャッフル付きCompose。

class pytoolkit.image.RandomRotate(degrees=15, expand=True, border_mode='edge', always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.DualTransform

回転。

property targets[ソース]
apply(image, degrees, **params)[ソース]
apply_to_bbox(bbox, **params)[ソース]
apply_to_keypoint(keypoint, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomTransform(size, flip=(False, True), translate=(0.125, 0.125), scale_prob=0.5, scale_range=(0.6666666666666666, 1.5), base_scale=1.0, aspect_prob=0.5, aspect_range=(0.75, 1.3333333333333333), rotate_prob=0.25, rotate_range=(- 15, 15), border_mode='edge', clip_bboxes=True, mode='normal', always_apply=False, p=1.0)[ソース]

ベースクラス: albumentations.core.transforms_interface.DualTransform

Flip, Scale, Resize, Rotateをまとめて処理。

パラメータ
  • size (typing.Tuple[int, int]) -- 出力サイズ(h, w)

  • flip (typing.Tuple[bool, bool]) -- 反転の有無(vertical, horizontal)

  • translate (typing.Tuple[float, float]) -- 平行移動の量(vertical, horizontal)

  • border_mode (str) -- edge, reflect, wrap, zero, half, one

  • mode (str) -- "normal", "preserve_aspect", "crop"

  • scale_prob (float) --

  • scale_range (typing.Tuple[float, float]) --

  • base_scale (float) --

  • aspect_prob (float) --

  • aspect_range (typing.Tuple[float, float]) --

  • rotate_prob (float) --

  • rotate_range (typing.Tuple[int, int]) --

  • clip_bboxes (bool) --

  • always_apply (bool) --

  • p (float) --

classmethod create_refine(size, flip=(False, True), translate=(0.0625, 0.0625), border_mode='edge', clip_bboxes=True, mode='normal', always_apply=False, p=1.0)[ソース]

Refined Data Augmentation <https://arxiv.org/abs/1909.09148> 用の控えめバージョンを作成する。

パラメータ
  • size (Tuple[int, int]) --

  • flip (Tuple[bool, bool]) --

  • translate (Tuple[float, float]) --

  • border_mode (str) --

  • clip_bboxes (bool) --

  • mode (str) --

  • always_apply (bool) --

  • p (float) --

戻り値の型

pytoolkit.image.RandomTransform

classmethod create_test(size, border_mode='edge', clip_bboxes=True, mode='normal', always_apply=False, p=1.0)[ソース]

Data Augmentation無しバージョン(リサイズのみ)を作成する。

パラメータ
  • size (Tuple[int, int]) --

  • border_mode (str) --

  • clip_bboxes (bool) --

  • mode (str) --

  • always_apply (bool) --

  • p (float) --

戻り値の型

pytoolkit.image.RandomTransform

apply(image, m, interp=None, **params)[ソース]
apply_to_bbox(bbox, m, image_size, **params)[ソース]
apply_to_keypoint(keypoint, m, **params)[ソース]
apply_to_mask(img, interp=None, **params)[ソース]
get_params_dependent_on_targets(params)[ソース]
property targets_as_params[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.Resize(*, size=None, width=None, height=None, mode='cv2', always_apply=False, p=1)[ソース]

ベースクラス: albumentations.core.transforms_interface.DualTransform

リサイズ。

パラメータ
  • size -- 出力サイズ。(H, W)

  • mode -- cv2 or tf or pil

環境にもよるが、1024x768 -> 331x331でcv2:3ms、tf:30ms、pil:10msくらい。 (tf/pilは遅めなので要注意。ただしcv2は拡大と縮小の混在は画質が悪いので要注意。)

apply(image, **params)[ソース]
apply_to_bbox(bbox, **params)[ソース]
apply_to_keypoint(keypoint, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomColorAugmentors(noisy=False, grayscale=False, p=1)[ソース]

ベースクラス: pytoolkit.image.RandomCompose

色関連のDataAugmentationをいくつかまとめたもの。

パラメータ
  • noisy (bool) -- Trueを指定すると細かいノイズ系も有効になる。

  • grayscale (bool) -- RGBではなくグレースケールならTrue。

get_transform_init_args_names()[ソース]
class pytoolkit.image.GaussNoise(scale=(0, 15), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

ガウシアンノイズ。

apply(image, scale, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.SaltAndPepperNoise(salt=0.01, pepper=0.01, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

Salt-and-pepper noise。

apply(image, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.PerlinNoise(alpha=(0, 0.5), frequency=(2.0, 4.0), octaves=(3, 5), ar=(0.5, 2.0), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

Perlin noise。

apply(image, alpha, frequency, octaves, ar, seed, **params)[ソース]
static perlin_noise(shape, frequency=3.0, octaves=5, ar=1.0, persistence=0.5, lacunarity=2.0, seed=0)[ソース]

パーリンノイズの生成。

パラメータ
  • shape (Tuple[int, int]) -- (H, W)

  • frequency (float) -- 短辺の周波数

  • octaves (int) -- 重ねる数

  • ar (float) -- アスペクト比。>1なら横長、<1なら縦長のノイズを生成する

  • persistence (float) --

  • lacunarity (float) --

  • seed (int) --

get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomBlur(sigma=(0, 2), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

ぼかし。

apply(image, sigma, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomUnsharpMask(sigma=0.5, alpha=(0, 3), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

シャープ化。

apply(image, alpha, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomBrightness(shift=(- 50, 50), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

明度の変更。

apply(image, shift, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomContrast(alpha=(0.5, 2), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

コントラストの変更。

apply(image, alpha, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomSaturation(alpha=(0.5, 2), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

彩度の変更。

apply(image, alpha, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomHue(alpha=(0.6666666666666666, 1.5), beta=(- 30, 30), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

色相の変更。

apply(image, alpha, beta, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomEqualize(always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

ヒストグラム平坦化。

↓で有効そうだったので。

■AutoAugment: Learning Augmentation Policies from Data https://arxiv.org/abs/1805.09501

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomAutoContrast(always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

オートコントラスト。

↓で有効そうだったので。

■AutoAugment: Learning Augmentation Policies from Data https://arxiv.org/abs/1805.09501

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomPosterize(bits=(4, 7), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

ポスタリゼーション。

↓で有効そうだったので。

■AutoAugment: Learning Augmentation Policies from Data https://arxiv.org/abs/1805.09501

apply(image, bits, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomAlpha(alpha=0.125, scale_low=0.02, scale_high=0.4, rate_1=0.3333333333333333, rate_2=3, max_tries=30, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

画像の一部にランダムな色の半透明の矩形を描画する。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomErasing(scale_low=0.02, scale_high=0.4, rate_1=0.3333333333333333, rate_2=3, object_aware=False, object_aware_prob=0.5, max_tries=30, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

Random Erasing <https://arxiv.org/abs/1708.04896>

パラメータ
  • object_aware -- yがObjectsAnnotationのとき、各オブジェクト内でRandom Erasing。(論文によるとTrueとFalseの両方をやるのが良い)

  • object_aware_prob -- 各オブジェクト毎のRandom Erasing率。全体の確率は1.0にしてこちらで制御する。

apply(image, bboxes=None, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.GridMask(r=0.6, d=(0.4, 1.0), random_color=False, fill_value=0, always_apply=False, p=0.7)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

GridMask <https://arxiv.org/abs/2001.04086> <https://github.com/akuxcw/GridMask>

  • rは大きいほどマスクが小さくなる

  • d1, d2は入力サイズに対する比率で指定

  • pは(Albumentationsの流儀とは合わせず)(しかし可変にするのも面倒なので)Faster-RCNNでの実験で一番良かった0.7に

パラメータ
  • r (typing.Union[float, typing.Tuple[float, float]]) --

  • d (typing.Tuple[float, float]) --

  • random_color (bool) --

  • fill_value (int) --

  • always_apply (bool) --

  • p (float) --

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.Standardize(always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

標準化。0~255に適当に収める。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.ToGrayScale(always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

グレースケール化。チャンネル数はとりあえず維持。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomBinarize(threshold=(95, 159), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

ランダム2値化(白黒化)。

apply(image, threshold, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.Binarize(threshold=127, always_apply=False, p=1)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

2値化(白黒化)。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.SpeckleNoise(scale=(0, 15), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

Speckle noise。

参照

apply(image, scale, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.RandomMorphology(mode, ksize=(1, 5), element_shape=2, always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

モルフォロジー変換

パラメータ
  • mode -- 動作モード - "erode" - "dilate" - "open" - "close"

  • ksize -- カーネルサイズの幅 (min, max)

  • element_shape -- カーネルの形状 - cv2.MORPH_ELLIPSE: 楕円 - cv2.MORPH_RECT: 矩形

参照

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.WrappedTranslateX(scale=(- 0.25, 0.25), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

水平に移動してはみ出た分を反対側にくっつける。

apply(image, scale, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.WrappedTranslateY(scale=(- 0.25, 0.25), always_apply=False, p=0.5)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

垂直に移動してはみ出た分を反対側にくっつける。

apply(image, scale, **params)[ソース]
get_params()[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.To3Channel(always_apply=False, p=1.0)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

入力がグレースケールの場合、R=G=Bにshapeを変える。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]
class pytoolkit.image.To1Channel(always_apply=False, p=1.0)[ソース]

ベースクラス: albumentations.core.transforms_interface.ImageOnlyTransform

(H, W, 1)のshapeで返す。入力がRGBの場合、(R + G + B)/3。

apply(image, **params)[ソース]
get_transform_init_args_names()[ソース]

pytoolkit.lgb module

LightGBM関連。

pytoolkit.lgb.cv(models_dir, feats_train, y_train, folds, params, weights=None, groups=None, init_score=None, fobj=None, feval=None, early_stopping_rounds=200, num_boost_round=9999, verbose_eval=100, importance_type='gain')[ソース]

LightGBMでCVしてできたモデルをmodels_dir配下に保存する。

パラメータ
  • models_dir (Union[str, pathlib.Path]) --

  • feats_train (Union[pandas.core.frame.DataFrame, numpy.ndarray]) --

  • y_train (numpy.ndarray) --

  • folds (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) --

  • params (dict) --

  • weights (Optional[Union[list, numpy.ndarray, pandas.core.series.Series]]) --

  • groups (Optional[Union[list, numpy.ndarray, pandas.core.series.Series]]) --

  • init_score (Optional[Union[list, numpy.ndarray, pandas.core.series.Series]]) --

  • early_stopping_rounds (int) --

  • num_boost_round (int) --

  • verbose_eval (int) --

  • importance_type (str) --

戻り値の型

None

pytoolkit.lgb.load(models_dir, nfold)[ソース]

cvで保存したモデルの読み込み。

パラメータ

nfold (int) --

戻り値の型

typing.List[lgb.Booster]

pytoolkit.lgb.predict(boosters, feats_test)[ソース]

推論。

パラメータ
  • boosters (typing.List[lgb.Booster]) --

  • feats_test (typing.Union[pd.DataFrame, np.ndarray]) --

戻り値の型

typing.List[np.ndarray]

pytoolkit.lgb.predict_oof(boosters, feats_train, folds)[ソース]

out-of-fold predictions。

パラメータ
  • boosters (typing.List[lgb.Booster]) --

  • feats_train (typing.Union[pd.DataFrame, np.ndarray]) --

  • folds (typing.Sequence[typing.Tuple[np.ndarray, np.ndarray]]) --

戻り値の型

np.ndarray

pytoolkit.lgb.f1_metric(preds, data)[ソース]

LightGBM用2クラスF1スコア

pytoolkit.lgb.mf1_metric(preds, data)[ソース]

LightGBM用多クラスF1スコア(マクロ平均)

pytoolkit.lgb.r2_metric(preds, data)[ソース]

LightGBM用R2

class pytoolkit.lgb.EvaluationLogger(period=100, show_stdv=True, level=20)[ソース]

ベースクラス: object

pythonのloggingモジュールでログ出力するcallback。

参照

pytoolkit.log module

ログ関連。

fmtに色々出したいときはこの辺を参照: https://docs.python.jp/3/library/logging.html#logrecord-attributes

pytoolkit.log.init(output_path, append=False, rotate=False, max_bytes=1048576, backup_count=10, stream_level=20, stream_fmt='[%(levelname)-5s] %(message)s', file_level=10, file_fmt='%(asctime)s [%(levelname)-5s] %(message)s <%(name)s> %(filename)s:%(lineno)d', matplotlib_level=30, pil_level=20, close_tf_logger=True)[ソース]

ルートロガーの初期化。

pytoolkit.log.get(name)[ソース]

ロガーを取得して返す。

pytoolkit.log.stream_handler(stream=None, level=20, fmt='[%(levelname)-5s] %(message)s')[ソース]

StreamHandlerを作成して返す。levelは文字列で'DEBUG'とかも指定可。(Python>=3.2)

pytoolkit.log.file_handler(output_path, append=False, rotate=False, max_bytes=1048576, backup_count=10, encoding='utf-8', level=10, fmt='[%(levelname)-5s] %(message)s <%(name)s:%(filename)s:%(lineno)d>')[ソース]

RotatingFileHandler/FileHandlerを作成して返す。levelは文字列で'INFO'とかも指定可。

pytoolkit.log.close(logger)[ソース]

loggerが持っているhandlerを全部closeしてremoveする。

class pytoolkit.log.trace(process_name=None, level=20)[ソース]

ベースクラス: object

開始・終了をログるdecorator&context manager。

パラメータ
  • process_name -- ログに出力する処理の名前。(Noneなら関数名。context managerとしての使用時は必須)

  • level -- ログレベル。文字列で'DEBUG'とかも指定可。

サンプル

decoratorの例:

@tk.log.trace()
def func()
    pass

context managerの例:

with tk.log.trace("process"):
    process()

pytoolkit.losses module

Kerasの損失関数を実装するための関数など。

pytoolkit.losses.reduce(x, reduce_mode)[ソース]

バッチ次元だけ残して合計や平均を取る。

pytoolkit.losses.empty(y_true, y_pred)[ソース]

ダミーのloss

pytoolkit.losses.binary_crossentropy(y_true, y_pred, from_logits=False, alpha=None, label_smoothing=None, reduce_mode='sum')[ソース]

クラス間のバランス補正ありのbinary_crossentropy。

パラメータ

alpha (float or None) -- class 1の重み。

pytoolkit.losses.binary_focal_loss(y_true, y_pred, gamma=2.0, from_logits=False, alpha=None, label_smoothing=None, reduce_mode='sum')[ソース]

2クラス分類用Focal Loss <https://arxiv.org/abs/1708.02002>。

パラメータ

alpha (float or None) -- class 1の重み。論文では0.25。

pytoolkit.losses.categorical_crossentropy(y_true, y_pred, from_logits=False, alpha=None, class_weights=None, label_smoothing=None, reduce_mode='sum')[ソース]

クラス間のバランス補正ありのcategorical_crossentropy。

Focal lossの論文ではα=0.75が良いとされていた。(class 0の重みが0.25)

label_smoothing を使う場合は0.2とかを指定。

参照

pytoolkit.losses.categorical_focal_loss(y_true, y_pred, from_logits=False, gamma=2.0, alpha=None, class_weights=None, reduce_mode='sum')[ソース]

多クラス分類用Focal Loss <https://arxiv.org/abs/1708.02002>。

パラメータ

alpha (float or None) -- class 0以外の重み。論文では0.25。

pytoolkit.losses.symmetric_lovasz_hinge(y_true, y_pred, from_logits=False, per_sample=True, activation='elu+1')[ソース]

lovasz_hingeのsymmetricバージョン

pytoolkit.losses.lovasz_hinge(y_true, y_pred, from_logits=False, per_sample=True, activation='elu+1')[ソース]

Lovasz hinge loss。<https://arxiv.org/abs/1512.07797>

pytoolkit.losses.lovasz_binary_crossentropy(y_true, y_pred, from_logits=False, per_sample=True, epsilon=0.01, alpha=None)[ソース]

Lovasz hinge lossのhingeじゃない版。

パラメータ

epsilon -- sigmoidの値をclipする値。 sigmoid=0.01のときlogit=-4.6くらい。

pytoolkit.losses.l1_smooth_loss(y_true, y_pred)[ソース]

L1-smooth loss。

pytoolkit.losses.mse(y_true, y_pred, reduce_mode='mean')[ソース]

mean squared error。

pytoolkit.losses.mae(y_true, y_pred, reduce_mode='mean')[ソース]

mean absolute error。

pytoolkit.losses.rmse(y_true, y_pred, reduce_mode='mean')[ソース]

root mean squared error。

pytoolkit.losses.mape(y_true, y_pred, reduce_mode='mean')[ソース]

mean absolute percentage error。

pytoolkit.losses.ciou(y_true, y_pred, epsilon=1e-07)[ソース]

Complete IoU loss <https://arxiv.org/abs/1911.08287>

パラメータ
  • y_true -- 答えのbboxes。shape=(samples, anchors_h, anchors_w, 4)

  • y_pred -- 出力のbboxes。shape=(samples, anchors_h, anchors_w, 4)

戻り値

損失の値。shape=(samples, anchors_h, anchors_w)

pytoolkit.math module

numpy関連。

pytoolkit.math.set_ndarray_format()[ソース]

ndarrayのstr()やrepr()でshapeが分かるようにする。

戻り値の型

None

pytoolkit.math.set_numpy_error()[ソース]

nanとかが出るときにraiseするように設定する。

戻り値の型

None

pytoolkit.math.sigmoid(x)[ソース]

シグモイド関数。

pytoolkit.math.logit(x, epsilon=1e-07)[ソース]

シグモイド関数の逆関数。

pytoolkit.math.softmax(x, axis=- 1)[ソース]

ソフトマックス関数。

pytoolkit.math.cosine_most_similars(v1, v2, batch_size=10000)[ソース]

v1の各ベクトルに対して、v2の中で最もコサイン類似度の大きいindexとその類似度を返す。

パラメータ
  • v1 (numpy.ndarray) -- 基準となるベクトル (shape=(N, C))

  • v2 (numpy.ndarray) -- 探す対象のベクトル (shape=(M, C))

  • batch_size (int) -- いくつのベクトルをまとめて処理するのか (メモリ使用量に影響)

戻り値

indexの配列と類似度の配列 (shape=(N,))

戻り値の型

Tuple[numpy.ndarray, numpy.ndarray]

pytoolkit.math.l2_normalize(x, axis=- 1)[ソース]

ベクトルのL2正規化。

パラメータ
  • x (numpy.ndarray) --

  • axis (int) --

戻り値の型

numpy.ndarray

pytoolkit.metrics module

Kerasのmetrics関連。

pytoolkit.metrics.binary_accuracy(y_true, y_pred)[ソース]

Soft-targetとかでも一応それっぽい値を返すbinary accuracy。

y_true = 0 or 1 で y_pred = 0.5 のとき、BCEは np.log1p(1) になる。(0.693くらい) それ以下なら合ってることにする。

<https://www.wolframalpha.com/input/?dataset=&i=-(y*log(x)%2B(1-y)*log(1-x))%3Dlog(exp(0)%2B1)>

pytoolkit.metrics.binary_iou(y_true, y_pred, target_classes=None, threshold=0.5)[ソース]

画像ごとクラスごとのIoUを算出して平均するmetric。

パラメータ
  • target_classes -- 対象のクラスindexの配列。Noneなら全クラス。

  • threshold -- 予測の閾値

pytoolkit.metrics.categorical_iou(y_true, y_pred, target_classes=None, strict=True)[ソース]

画像ごとクラスごとのIoUを算出して平均するmetric。

パラメータ
  • target_classes -- 対象のクラスindexの配列。Noneなら全クラス。

  • strict -- ラベルに無いクラスを予測してしまった場合に減点されるようにするならTrue、ラベルにあるクラスのみ対象にするならFalse。

pytoolkit.metrics.tpr(y_true, y_pred)[ソース]

True positive rate。(真陽性率、再現率、Recall)

pytoolkit.metrics.tnr(y_true, y_pred)[ソース]

True negative rate。(真陰性率)

pytoolkit.metrics.fbeta_score(y_true, y_pred, beta=1)[ソース]

Fβ-score。

pytoolkit.metrics.bboxes_iou(y_true, y_pred, epsilon=1e-07)[ソース]

bounding boxesのIoU。

パラメータ
  • y_true -- 答えのbboxes。shape=(samples, anchors_h, anchors_w, 4)

  • y_pred -- 出力のbboxes。shape=(samples, anchors_h, anchors_w, 4)

戻り値

IoU値。shape=(samples, anchors_h, anchors_w)

pytoolkit.metrics.recall(y_true, y_pred)[ソース]

True positive rate。(真陽性率、再現率、Recall)

class pytoolkit.metrics.CosineSimilarity(*args, **kwargs)[ソース]

ベースクラス: tensorflow.python.keras.metrics.Metric

コサイン類似度。

update_state(y_true, y_pred, sample_weight=None)[ソース]

指標の算出。

result()[ソース]

Computes and returns the metric value tensor.

Result computation is an idempotent operation that simply calculates the metric value using the state variables.

get_config()[ソース]

Returns the serializable config of the metric.

pytoolkit.ml module

機械学習関連。

pytoolkit.ml.listup_classification(dirpath, class_names=None, use_tqdm=True, check_image=False)[ソース]

画像分類でよくある、クラス名ディレクトリの列挙。クラス名の配列, X, yを返す。

パラメータ
  • class_names (Optional[Sequence[str]]) -- クラス名の配列

  • use_tqdm (bool) -- tqdmを使用するか否か

  • check_image (bool) -- 画像として読み込みチェックを行い、読み込み可能なファイルのみ返すか否か (遅いので注意)

戻り値

class_names, X, y

戻り値の型

Tuple[List[str], numpy.ndarray, numpy.ndarray]

pytoolkit.ml.listup_files(dirpath, recurse=False, use_tqdm=True, check_image=False)[ソース]

ファイルの列挙。

パラメータ
  • recurse -- 再帰的に配下もリストアップするか否か

  • use_tqdm -- tqdmを使用するか否か

  • check_image -- 画像として読み込みチェックを行い、読み込み可能なファイルのみ返すか否か (遅いので注意)

pytoolkit.ml.cv_indices(X, y, cv_count, cv_index, split_seed, stratify=None)[ソース]

Cross validationのインデックスを返す。

pytoolkit.ml.get_folds(X, y, cv_count, split_seed, stratify=None)[ソース]

Cross validationのインデックスを返す。

パラメータ
  • X -- 入力データ。

  • y -- 出力データ。

  • cv_count (int) -- 分割数。

  • split_seed (int) -- 乱数のseed。

  • stratify (Optional[bool]) -- StratifiedKFoldにするならTrue。

戻り値

インデックス

戻り値の型

list of tuple(train_indices, val_indices)

pytoolkit.ml.to_categorical(num_classes)[ソース]

クラスラベルのone-hot encoding化を行う関数を返す。

pytoolkit.ml.print_scores(precisions, recalls, fscores, supports, class_names=None, print_fn=None)[ソース]

適合率・再現率などをprintする。(classification_report風。)

pytoolkit.ml.search_threshold(y_true, y_pred, thresholds, score_fn, direction, cv=10)[ソース]

閾値探索。

パラメータ
  • y_true (numpy.ndarray) -- 答え。

  • y_pred (numpy.ndarray) -- 予測結果。

  • thresholds (numpy.ndarray) -- 閾値の配列。

  • score_fn (Callable[[numpy.ndarray, numpy.ndarray, float], float]) -- 答えと予測結果と閾値を受け取り、スコアを返す関数。

  • direction (str) -- 'minimize' or 'maximize'

  • cv (int) -- cross validationの分割数。

戻り値

スコア, 閾値

戻り値の型

Tuple[float, float]

pytoolkit.ml.top_k_accuracy(y_true, y_pred, k=5)[ソース]

Top-K accuracy。

pytoolkit.ml.mape(y_true, y_pred)[ソース]

MAPE(mean absolute percentage error)。

pytoolkit.ml.calibrate_proba(proba, beta)[ソース]

不均衡データなどの分類の確信度の補正。

パラメータ
  • proba (Union[numpy.ndarray, tensorflow.python.framework.ops.Tensor]) -- 補正する確信度。shape=(samples, classes)

  • beta (numpy.ndarray) -- 補正する係数。shape=(classes,)

戻り値

補正結果。shape=(samples, classes)

参照

pytoolkit.ml.get_effective_class_weights(samples_per_classes, beta=0.9999)[ソース]

Class-Balanced Loss風のclass_weightsを作成して返す。<https://arxiv.org/abs/1901.05555>

パラメータ
  • samples_per_classes (Sequence[int]) -- クラスごとのサンプルサイズ (shape=(num_classes,))

  • beta (float) -- ハイパーパラメーター

pytoolkit.models module

Kerasのモデル関連。

Horovodに対応した簡単なwrapperなど。

ただし引数のデフォルトや細かい挙動を変えていたりするので要注意。

pytoolkit.models.check(train_model, pred_model, models_dir, dataset=None, train_data_loader=None, pred_data_loader=None, save_mode='hdf5')[ソース]

モデルの簡易動作確認用コード。

パラメータ
  • train_model (tensorflow.python.keras.engine.training.Model) -- 学習用モデル

  • pred_model (tensorflow.python.keras.engine.training.Model) -- 推論用モデル

  • models_dir (Union[str, os.PathLike]) -- 情報の保存先ディレクトリ

  • dataset (Optional[pytoolkit.data.Dataset]) -- チェック用データ (少数にしておくこと)

  • train_data_loader (Optional[pytoolkit.data.DataLoader]) -- 学習用DataLoader

  • pred_data_loader (Optional[pytoolkit.data.DataLoader]) -- 推論用DataLoader

  • save_mode (str) -- 保存形式 ("hdf5", "saved_model", "onnx", "tflite"のいずれか)

pytoolkit.models.load(path, custom_objects=None, compile=False)[ソース]

モデルの読み込み。

パラメータ
  • path (Union[str, os.PathLike]) --

  • custom_objects (Optional[Dict[str, Any]]) --

  • compile (bool) --

pytoolkit.models.load_weights(model, path, by_name=False, skip_mismatch=False, skip_not_exist=False, strict=True, strict_fraction=0.95)[ソース]

モデルの重みの読み込み。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- モデル

  • path (Union[str, os.PathLike]) -- ファイルパス

  • by_name (bool) -- レイヤー名が一致する重みを読むモードにするならTrue。Falseなら並び順。

  • skip_mismatch (bool) -- shapeが不一致の場合にskipするならTrue。(by_name=Trueの場合のみ有効)

  • skip_not_exist (bool) -- ファイルが存在しない場合にエラーにしないならTrue。

  • strict (bool) -- 読み込み前と重みがあまり変わらなかったらエラーにする。

  • strict_fraction (float) -- 重み不一致率の最低値。これ以下ならエラーにする。

戻り値

読み込んだか否か。skip_not_exist=Trueの場合に限りFalseが返る可能性がある。

戻り値の型

bool

pytoolkit.models.save(model, path, mode='hdf5', include_optimizer=False)[ソース]

モデルの保存。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- モデル

  • path (Union[str, os.PathLike]) -- 保存先。saved_modelの場合はディレクトリ

  • mode (str) -- "hdf5", "saved_model", "onnx", "tflite"のいずれか

  • include_optimizer (bool) -- HDF5形式で保存する場合にoptimizerを含めるか否か

pytoolkit.models.summary(model)[ソース]

summaryを実行するだけ。

パラメータ

model (tensorflow.python.keras.engine.training.Model) --

pytoolkit.models.plot(model, to_file='model.png', show_shapes=True, show_layer_names=True, rankdir='TB')[ソース]

モデルのグラフのplot。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) --

  • to_file (Union[str, os.PathLike]) --

  • show_shapes (bool) --

  • show_layer_names (bool) --

  • rankdir (str) --

pytoolkit.models.compile(model, optimizer, loss=None, metrics=None, experimental_run_tf_function=None, **kwargs)[ソース]

compileするだけ。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) --

  • optimizer (Union[str, tensorflow.python.keras.optimizer_v2.optimizer_v2.OptimizerV2]) --

  • loss (Optional[Union[str, tensorflow.python.keras.losses.Loss, Callable[[tensorflow.python.framework.ops.Tensor, tensorflow.python.framework.ops.Tensor], tensorflow.python.framework.ops.Tensor]]]) --

  • metrics (Optional[List[Union[str, tensorflow.python.keras.metrics.Metric, Callable[[tensorflow.python.framework.ops.Tensor, tensorflow.python.framework.ops.Tensor], tensorflow.python.framework.ops.Tensor]]]]) --

  • experimental_run_tf_function (Optional[bool]) --

pytoolkit.models.recompile(model)[ソース]

optimizerなどを再利用してコンパイル。

パラメータ

model (tensorflow.python.keras.engine.training.Model) --

pytoolkit.models.modify_learning_rate(model, factor)[ソース]

学習率にfactorを掛け算する。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) --

  • factor (float) --

pytoolkit.models.set_learning_rate(model, learnig_rate)[ソース]

学習率を設定する。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) --

  • learnig_rate (float) --

pytoolkit.models.fit(model, train_iterator, val_iterator=None, val_freq='auto', class_weight=None, epochs=1800, callbacks=None, verbose=1, initial_epoch=0)[ソース]

学習。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- モデル

  • train_iterator (pytoolkit.data.Iterator) -- 訓練データ

  • val_iterator (Optional[pytoolkit.data.Iterator]) -- 検証データ。Noneなら省略。

  • val_freq (Optional[Union[int, Sequence[int], str]]) -- 検証を行うエポック数の間隔、またはエポック数のリスト。0ならvalidationしない(独自仕様)。"auto"なら適当に決める(独自仕様)。

  • class_weight (Optional[Dict[int, float]]) -- クラスごとの重みのdict

  • epochs (int) -- エポック数

  • callbacks (Optional[List[tensorflow.python.keras.callbacks.Callback]]) -- コールバック。EpochLoggerとErrorOnNaNとhorovod関連は自動追加。

  • verbose (int) -- 1ならプログレスバー表示、2ならepoch毎の結果だけ表示。

  • initial_epoch (int) -- 学習を開始するエポック数 - 1

pytoolkit.models.make_val_freq(val_freq, epochs, train_size, val_size, max_val_per_train=0.1)[ソース]

val_freqをほどよい感じに作成する。

pytoolkit.models.make_callbacks(callbacks, training)[ソース]

callbacksをいい感じにする。

パラメータ
  • callbacks (Optional[List[tensorflow.python.keras.callbacks.Callback]]) --

  • training (bool) --

戻り値の型

List[tensorflow.python.keras.callbacks.Callback]

pytoolkit.models.predict(model, iterator, callbacks=None, verbose=1, on_batch_fn=None)[ソース]

推論。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- モデル

  • iterator (pytoolkit.data.Iterator) -- 推論したい入力データ

  • callbacks (Optional[List[tensorflow.python.keras.callbacks.Callback]]) -- コールバック

  • verbose (int) -- プログレスバーを表示するか否か

  • on_batch_fn (Optional[Callable[[tensorflow.python.keras.engine.training.Model, Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]], Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]]]) -- モデルとミニバッチ分の入力データを受け取り、推論結果を返す処理。(TTA用)

  • flow -- 結果をgeneratorで返すならTrue

  • desc -- flow時のtqdmのdesc

戻り値

推論結果。

戻り値の型

Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]

pytoolkit.models.predict_flow(model, ds, steps, callbacks=None, verbose=1, on_batch_fn=None, desc='predict')[ソース]

推論。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- モデル

  • ds (tensorflow.python.data.ops.dataset_ops.DatasetV2) -- 推論したい入力データ

  • steps (int) -- ステップ数

  • callbacks (Optional[List[tensorflow.python.keras.callbacks.Callback]]) -- コールバック

  • verbose (int) -- プログレスバー(tqdm)を表示するか否か

  • on_batch_fn (Optional[Callable[[tensorflow.python.keras.engine.training.Model, Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]], Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]]]) -- モデルとミニバッチ分の入力データを受け取り、推論結果を返す処理。(TTA用)

  • flow -- 結果をgeneratorで返すならTrue

  • desc (str) -- flow時のtqdmのdesc

戻り値

推論結果。サンプルごとのgenerator。

戻り値の型

Iterator[Union[numpy.ndarray, List[numpy.ndarray], Dict[str, numpy.ndarray]]]

pytoolkit.models.evaluate(model, iterator, callbacks=None, verbose=1)[ソース]

評価。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- モデル

  • iterator (pytoolkit.data.Iterator) -- データ

  • callbacks (Optional[List[tensorflow.python.keras.callbacks.Callback]]) -- コールバック

  • verbose (int) -- 1ならプログレスバー表示

戻り値

メトリクス名と値のdict

戻り値の型

Dict[str, float]

pytoolkit.models.freeze_layers(model, layer_class)[ソース]

指定したレイヤーをfreezeする。

パラメータ
  • model (Union[tensorflow.python.keras.engine.training.Model, tensorflow.python.keras.engine.base_layer.Layer]) --

  • layer_class (type) --

pytoolkit.models.predict_on_batch_augmented(model, X_batch, flip=(False, True), crop_size=(3, 3), padding_size=(32, 32), padding_mode='edge')[ソース]

ミニバッチ1個分の推論処理&TTA。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- モデル。

  • X_batch (numpy.ndarray) -- データ。

  • flip (Tuple[bool, bool]) -- 水平/垂直方向の反転を行うか否か。(v, h)

  • crop_size (Tuple[int, int]) -- 縦横のcropのパターンの数。(v, h)

  • padding_size (Tuple[int, int]) -- crop前にパディングするサイズ。(v, h)

  • padding_mode (str) -- パディングの種類。(np.padのmode)

戻り値

推論結果のリスト。

戻り値の型

Union[numpy.ndarray, List[numpy.ndarray]]

pytoolkit.models.fingerprint(model)[ソース]

重みの同一性を確認するための文字列を作成して返す。"xx:xx:xx:xx"形式。

パラメータ

model (tensorflow.python.keras.engine.training.Model) --

戻り値の型

str

pytoolkit.ndimage module

主にnumpy配列(rows×cols×channels(RGB))の画像処理関連。

uint8のRGBで0~255として扱うのを前提とする。 あとグレースケールの場合もrows×cols×1の配列で扱う。

pytoolkit.ndimage.load(path_or_array, grayscale=False)[ソース]

画像の読み込み。

パラメータ

path_or_array (Union[numpy.ndarray, io.IOBase, str, pathlib.Path]) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.get_image_size(path_or_array)[ソース]

画像サイズを取得する。(H, W)

パラメータ

path_or_array (Union[numpy.ndarray, io.IOBase, str, pathlib.Path]) --

戻り値の型

Tuple[int, int]

pytoolkit.ndimage.save(path, img, jpeg_quality=None)[ソース]

画像の保存。

やや余計なお世話だけど0~255にクリッピング(飽和)してから保存する。

パラメータ
  • path (Union[str, pathlib.Path]) -- 保存先ファイルパス。途中のディレクトリが無ければ自動的に作成。

  • img (numpy.ndarray) -- 画像のndarray。shape=(height, width, 3)のRGB画像。dtypeはnp.uint8

  • jpeg_quality (Optional[int]) -- 1~100で指定する。

pytoolkit.ndimage.rotate(rgb, degrees, expand=True, interp='lanczos', border_mode='edge')[ソース]

回転。

パラメータ
  • rgb (numpy.ndarray) --

  • degrees (float) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.compute_rotate(width, height, degrees, expand=False)[ソース]

回転の変換行列を作成して返す。

パラメータ
  • width (int) -- 横幅

  • height (int) -- 縦幅

  • degrees (float) -- 回転する角度

  • expand (bool) -- Defaults to False. はみ出ないように画像を大きくするならTrue。

戻り値

変換行列、幅、高さ

戻り値の型

Tuple[numpy.ndarray, int, int]

pytoolkit.ndimage.pad(rgb, width, height, padding='edge')[ソース]

パディング。width/heightはpadding後のサイズ。(左右/上下均等、端数は右と下につける)

パラメータ
  • rgb (numpy.ndarray) --

  • width (int) --

  • height (int) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.pad_ltrb(rgb, x1, y1, x2, y2, padding='edge')[ソース]

パディング。x1/y1/x2/y2は左/上/右/下のパディング量。

パラメータ
  • rgb (numpy.ndarray) --

  • x1 (int) --

  • y1 (int) --

  • x2 (int) --

  • y2 (int) --

pytoolkit.ndimage.crop(rgb, x, y, width, height)[ソース]

切り抜き。

パラメータ
  • rgb (numpy.ndarray) --

  • x (int) --

  • y (int) --

  • width (int) --

  • height (int) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.flip_lr(rgb)[ソース]

左右反転。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.flip_tb(rgb)[ソース]

上下反転。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.resize_long_side(rgb, long_side, expand=True, interp='lanczos')[ソース]

長辺の長さを指定したアスペクト比維持のリサイズ。

パラメータ
  • rgb (numpy.ndarray) --

  • long_side (int) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.resize(rgb, width, height, padding=None, interp='lanczos')[ソース]

リサイズ。

パラメータ
  • rgb (numpy.ndarray) --

  • width (int) --

  • height (int) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.gaussian_noise(rgb, random_state, scale)[ソース]

ガウシアンノイズ。scaleは0~50くらい。小さいほうが色が壊れないかも。

パラメータ
  • rgb (numpy.ndarray) --

  • random_state (numpy.random.mtrand.RandomState) --

  • scale (float) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.blur(rgb, sigma)[ソース]

ぼかし。sigmaは0~1程度がよい?

パラメータ
  • rgb (numpy.ndarray) --

  • sigma (float) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.unsharp_mask(rgb, sigma, alpha=2.0)[ソース]

シャープ化。sigmaは0~1程度、alphaは1~2程度がよい?

パラメータ
  • rgb (numpy.ndarray) --

  • sigma (float) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.median(rgb, size)[ソース]

メディアンフィルタ。sizeは3程度がよい?

パラメータ
  • rgb (numpy.ndarray) --

  • size (int) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.brightness(rgb, beta)[ソース]

明度の変更。betaの例:np.random.uniform(-32, +32)

パラメータ
  • rgb (numpy.ndarray) --

  • beta (float) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.contrast(rgb, alpha)[ソース]

コントラストの変更。alphaの例:np.random.uniform(0.75, 1.25)

パラメータ
  • rgb (numpy.ndarray) --

  • alpha (float) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.saturation(rgb, alpha)[ソース]

彩度の変更。alphaの例:np.random.uniform(0.5, 1.5)

パラメータ
  • rgb (numpy.ndarray) --

  • alpha (float) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.hue_lite(rgb, alpha, beta)[ソース]

色相の変更の適当バージョン。

パラメータ
  • rgb (numpy.ndarray) --

  • alpha (numpy.ndarray) --

  • beta (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.to_grayscale(rgb)[ソース]

グレースケール化。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.standardize(rgb)[ソース]

標準化。0~255に適当に収める。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.binarize(rgb, threshold)[ソース]

二値化(白黒化)。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.rot90(rgb, k)[ソース]

90度回転。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.equalize(rgb)[ソース]

ヒストグラム平坦化。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.auto_contrast(rgb, scale=255)[ソース]

オートコントラスト。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.posterize(rgb, bits)[ソース]

ポスタリゼーション。

パラメータ

rgb (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.geometric_transform(rgb, output_width, output_height, flip_h=False, flip_v=False, degrees=0, scale_h=1.0, scale_v=1.0, pos_h=0.5, pos_v=0.5, translate_h=0.0, translate_v=0.0, interp='lanczos', border_mode='edge')[ソース]

透視変換。

パラメータ
  • rgb (numpy.ndarray) -- 入力画像

  • output_width (int) -- 出力サイズ

  • output_height (int) -- 出力サイズ

  • flip_h (bool) -- Defaults to False. Trueなら水平に反転する。

  • flip_v (bool) -- Defaults to False. Trueなら垂直に反転する。

  • degrees (float) -- Defaults to 0. 回転する角度。(0や360なら回転無し。)

  • scale_h (float) -- Defaults to 1.0. 水平方向のスケール。 例えば0.5だと半分に縮小(zoom out / padding)、2.0だと倍に拡大(zoom in / crop)、1.0で等倍。

  • scale_v (float) -- Defaults to 1.0. 垂直方向のスケール。 例えば0.5だと半分に縮小(zoom out / padding)、2.0だと倍に拡大(zoom in / crop)、1.0で等倍。

  • pos_h (float) -- Defaults to 0.5. スケール変換に伴う水平位置。0で左端、0.5で中央、1で右端。

  • pos_v (float) -- Defaults to 0.5. スケール変換に伴う垂直位置。0で上端、0.5で中央、1で下端。

  • translate_h (float) -- Defaults to 0.0. 変形元を水平にずらす量。-0.125なら12.5%左にずらし、+0.125なら12.5%右にずらす。

  • translate_v (float) -- Defaults to 0.0. 変形元を垂直にずらす量。-0.125なら12.5%上にずらし、+0.125なら12.5%下にずらす。

  • interp (str) -- Defaults to 'lanczos'. 補間方法。 'nearest', 'bilinear', 'bicubic', 'lanczos'。縮小時は自動的にcv2.INTER_AREA。

  • border_mode (str) -- Defaults to 'edge'. パディング方法。'edge', 'reflect', 'wrap'

戻り値

変換後画像

戻り値の型

numpy.ndarray

pytoolkit.ndimage.compute_perspective(input_width, input_height, output_width, output_height, flip_h=False, flip_v=False, degrees=0, scale_h=1.0, scale_v=1.0, pos_h=0.5, pos_v=0.5, translate_h=0.0, translate_v=0.0)[ソース]

透視変換の変換行列を作成。

パラメータ
  • input_width (int) -- 入力サイズ

  • input_height (int) -- 入力サイズ

  • output_width (int) -- 出力サイズ

  • output_height (int) -- 出力サイズ

  • flip_h (bool) -- Defaults to False. Trueなら水平に反転する。

  • flip_v (bool) -- Defaults to False. Trueなら垂直に反転する。

  • degrees (float) -- Defaults to 0. 回転する角度。(0や360なら回転無し。)

  • scale_h (float) -- Defaults to 1.0. 水平方向のスケール。 例えば0.5だと半分に縮小(zoom out / padding)、2.0だと倍に拡大(zoom in / crop)、1.0で等倍。

  • scale_v (float) -- Defaults to 1.0. 垂直方向のスケール。 例えば0.5だと半分に縮小(zoom out / padding)、2.0だと倍に拡大(zoom in / crop)、1.0で等倍。

  • pos_h (float) -- Defaults to 0.5. スケール変換に伴う水平位置。0で左端、0.5で中央、1で右端。

  • pos_v (float) -- Defaults to 0.5. スケール変換に伴う垂直位置。0で上端、0.5で中央、1で下端。

  • translate_h (float) -- Defaults to 0.0. 変形元を水平にずらす量。-0.125なら12.5%左にずらし、+0.125なら12.5%右にずらす。

  • translate_v (float) -- Defaults to 0.0. 変形元を垂直にずらす量。-0.125なら12.5%上にずらし、+0.125なら12.5%下にずらす。

戻り値

変換行列

戻り値の型

numpy.ndarray

pytoolkit.ndimage.perspective_transform(rgb, width, height, m, interp='lanczos', border_mode='edge')[ソース]

透視変換。

パラメータ
  • rgb (numpy.ndarray) -- 入力画像

  • width (int) -- 出力サイズ

  • height (int) -- 出力サイズ

  • m (numpy.ndarray) -- 変換行列。

  • interp (str) -- Defaults to 'lanczos'. 補間方法。 'nearest', 'bilinear', 'bicubic', 'lanczos'。縮小時は自動的にcv2.INTER_AREA。

  • border_mode (str) -- Defaults to 'edge'. パディング方法。'edge', 'reflect', 'wrap'

戻り値

変換後画像

戻り値の型

numpy.ndarray

pytoolkit.ndimage.transform_points(points, m)[ソース]

geometric_transformの座標変換。

パラメータ
  • points (numpy.ndarray) -- 座標の配列。shape=(num_points, 2)。[(x, y)]

  • m (numpy.ndarray) -- 変換行列。

戻り値

変換後の座標の配列。

戻り値の型

numpy.ndarray

pytoolkit.ndimage.erase_random(rgb, random_state, bboxes=None, scale_low=0.02, scale_high=0.4, rate_1=0.3333333333333333, rate_2=3, alpha=None, max_tries=30)[ソース]

Random erasing <https://arxiv.org/abs/1708.04896>

パラメータ

random_state (numpy.random.mtrand.RandomState) --

pytoolkit.ndimage.mixup(sample1, sample2, mode='beta', alpha=0.2)[ソース]

mixup。 <https://arxiv.org/abs/1710.09412>

常に「sample1の重み >= sample2の重み」となるようにしている。

パラメータ
  • sample1 (pytoolkit.ndimage.T) -- データその1

  • sample2 (pytoolkit.ndimage.T) -- データその2

  • mode (str) -- 混ぜる割合の乱数の種類。 - 'beta': β分布を0.5以上にした分布 - 'uniform': [0.5, 1]の一様分布 - 'uniform_ex': [0.5, √2]の一様分布

  • alpha -- mode == 'beta'の場合のα。<1で0 or 1寄り、1で一様、>1で0.5寄り。

戻り値

混ぜられたデータ。

戻り値の型

tuple

pytoolkit.ndimage.mix_data(sample1, sample2, r)[ソース]

mixup用に入力や出力を混ぜる処理。rはsample1側に掛ける率。

パラメータ

r (numpy.float32) --

pytoolkit.ndimage.cut_mix(sample1, sample2, beta=1.0)[ソース]

CutMix。 <https://arxiv.org/abs/1905.04899>

パラメータ
  • sample1 (Tuple[numpy.ndarray, numpy.ndarray]) -- 画像とone-hot化したラベル(など)のタプル

  • sample2 (Tuple[numpy.ndarray, numpy.ndarray]) -- 画像とone-hot化したラベル(など)のタプル

  • beta (float) -- beta分布のbeta

戻り値

image, label

戻り値の型

Tuple[numpy.ndarray, numpy.ndarray]

pytoolkit.ndimage.preprocess_tf(rgb)[ソース]

RGB値の-1 ~ +1への変換

pytoolkit.ndimage.deprocess_tf(rgb, clip=True)[ソース]

preprocess_tfの逆変換

pytoolkit.ndimage.preprocess_torch(rgb)[ソース]

RGB値のpytorch風(?)変換

pytoolkit.ndimage.deprocess_torch(rgb, clip=True)[ソース]

preprocess_torchの逆変換

pytoolkit.ndimage.mask_to_onehot(rgb, class_colors, append_bg=False)[ソース]

RGBのマスク画像をone-hot形式に変換する。

パラメータ
  • class_colors (numpy.ndarray) -- 色の配列。shape=(num_classes, 3)

  • append_bg (bool) -- class_colorsに該当しない色のクラスを追加するならTrue。

  • rgb (numpy.ndarray) --

戻り値

ndarray shape=(H, W, num_classes) dtype=np.float32

append_bgがTrueの場合はnum_classesはlen(class_colors) + 1

戻り値の型

numpy.ndarray

pytoolkit.ndimage.mask_to_class(rgb, class_colors, void_class=None)[ソース]

RGBのマスク画像をクラスIDの配列に変換する。

パラメータ
  • class_colors (numpy.ndarray) -- 色の配列。shape=(num_classes, 3)

  • void_class (Optional[int]) -- class_colorsに該当しない色のピクセルの値。Noneならlen(class_colors)

  • rgb (numpy.ndarray) --

戻り値

ndarray shape=(H, W) dtype=np.int32

戻り値の型

numpy.ndarray

pytoolkit.ndimage.class_to_mask(classes, class_colors)[ソース]

クラスIDの配列をRGBのマスク画像に変換する。

パラメータ
  • classes (numpy.ndarray) -- クラスIDの配列。 shape=(H, W)

  • class_colors (numpy.ndarray) -- 色の配列。shape=(num_classes, 3)

戻り値

ndarray shape=(H, W, 3)

戻り値の型

numpy.ndarray

pytoolkit.ndimage.ensure_channel_dim(img)[ソース]

shapeが(H, W)なら(H, W, 1)にして返す。それ以外ならそのまま返す。

パラメータ

img (numpy.ndarray) --

戻り値の型

numpy.ndarray

pytoolkit.ndimage.to_uint8(x)[ソース]

floatからnp.uint8への変換。

pytoolkit.notifications module

学習結果の通知。

環境変数や.envからURLを取得して通知する。(無ければログ出力のみ)

pytoolkit.notifications.post_evals(evals, precision=3)[ソース]

評価結果を通知。

パラメータ
  • evals (Dict[str, Any]) -- 評価結果。

  • precision (int) --

pytoolkit.notifications.post(body, subject=None)[ソース]

通知。

パラメータ
  • body (str) --

  • subject (Optional[str]) --

pytoolkit.od module

物体検出関連。

class pytoolkit.od.ObjectsAnnotation(path, width, height, classes, bboxes, difficults=None, areas=None, crowdeds=None)[ソース]

ベースクラス: object

物体検出のアノテーションデータを持つためのクラス。

パラメータ
  • path (pathlib.Path) -- 画像ファイルのパス

  • width (int) -- 画像の横幅[px]

  • height (int) -- 画像の縦幅[px]

  • classes (numpy.ndarray) -- クラスIDのndarray。値は[0, num_classes)の整数。shapeは(物体数,)

  • bboxes (numpy.ndarray) -- bounding box(x1, y1, x2, y2)のndarray。値は[0, 1]。shapeは(物体数, 4)

  • difficults (numpy.ndarray) -- difficultフラグ(PASCAL VOCデータセット等で使用)のndarray。値はTrue or False。shapeは(物体数,)

  • areas (numpy.ndarray) -- 面積 (MS COCO用)

  • crowdeds (numpy.ndarray) -- クラウドソーシングでアノテーションされたか否か (MS COCO用)

static create_dataset(labels, class_names=None)[ソース]

ObjectsAnnotationの配列からDatasetを作成する。

パラメータ
戻り値

Dataset

戻り値の型

pytoolkit.data.Dataset

path: pathlib.Path[ソース]
width: int[ソース]
height: int[ソース]
classes: numpy.ndarray[ソース]
bboxes: numpy.ndarray[ソース]
difficults: numpy.ndarray = None[ソース]
areas: numpy.ndarray = None[ソース]
crowdeds: numpy.ndarray = None[ソース]
property num_objects[ソース]

物体の数を返す。

property real_bboxes[ソース]

実ピクセル数換算のbboxesを返す。

property bboxes_ar_fixed[ソース]

縦横比を補正したbboxesを返す。(prior box算出など用)

to_str(class_names)[ソース]

表示用の文字列化

plot(img, class_names, conf_threshold=0, max_long_side=None)[ソース]

ワクを描画した画像を作って返す。

rot90(k)[ソース]

90度回転。

class pytoolkit.od.ObjectsPrediction(classes, confs, bboxes)[ソース]

ベースクラス: object

物体検出の予測結果を持つクラス。

パラメータ
  • classes (numpy.ndarray) -- クラスIDのndarray。値は[0, num_classes)の整数。shapeは(物体数,)

  • confs (numpy.ndarray) -- 確信度のndarray。値は[0, 1]。shapeは(物体数,)

  • bboxes (numpy.ndarray) -- bounding box(x1, y1, x2, y2)のndarray。値は[0, 1]。shapeは(物体数, 4)

classes: numpy.ndarray[ソース]
confs: numpy.ndarray[ソース]
bboxes: numpy.ndarray[ソース]
apply_threshold(conf_threshold)[ソース]

確信度が閾値未満の物体を削除したものを作成して返す。

パラメータ

conf_threshold (float) --

戻り値の型

pytoolkit.od.ObjectsPrediction

property num_objects[ソース]

物体の数を返す。

to_str(width, height, class_names, conf_threshold=0)[ソース]

表示用の文字列化

plot(img, class_names=None, conf_threshold=0, max_long_side=None)[ソース]

ワクを描画した画像を作って返す。

is_match(classes, bboxes, conf_threshold=0, iou_threshold=0.5)[ソース]

classes/bboxesと過不足なく一致していたらTrueを返す。

get_real_bboxes(width, height)[ソース]

実ピクセル数換算のbboxesを返す。

crop(img, conf_threshold=0)[ソース]

Bounding boxで切り出した画像を返す。

pytoolkit.od.search_conf_threshold(y_true, y_pred, iou_threshold=0.5)[ソース]

物体検出の正解と予測結果から、F1スコアが最大になるconf_thresholdを返す。

パラメータ
pytoolkit.od.od_accuracy(y_true, y_pred, conf_threshold=0.0, iou_threshold=0.5)[ソース]

物体検出で過不足なく検出できた時だけ正解扱いとした正解率を算出する。

パラメータ
pytoolkit.od.compute_scores(y_true, y_pred, conf_threshold=0.0, iou_threshold=0.5, num_classes=None)[ソース]

物体検出の正解と予測結果から、適合率、再現率、F値、該当回数を算出して返す。

パラメータ
pytoolkit.od.confusion_matrix(y_true, y_pred, conf_threshold=0.0, iou_threshold=0.5, num_classes=None)[ソース]

物体検出用の混同行列を作る。

分類と異なり、検出漏れと誤検出があるのでその分列と行を1つずつ増やしたものを返す。 difficultは扱いが難しいので無視。

パラメータ
pytoolkit.od.compute_iou(bboxes_a, bboxes_b)[ソース]

IoU(Intersection over union、Jaccard係数)の算出。重なり具合を示す係数。(0~1)

pytoolkit.od.is_intersection(bboxes_a, bboxes_b)[ソース]

boxes_aとboxes_bでそれぞれ交差している部分が存在するか否かを返す。

pytoolkit.od.is_in_box(boxes_a, boxes_b)[ソース]

boxes_aがboxes_bの中に完全に入っているならtrue。

pytoolkit.od.plot_objects(base_image, classes, confs, bboxes, class_names=None, conf_threshold=0.0, max_long_side=None)[ソース]

画像+オブジェクト([class_id + confidence + xmin/ymin/xmax/ymax]×n)を画像化する。

パラメータ
  • base_image (numpy.ndarray) -- 元画像ファイルのパスまたはndarray

  • max_long_side (Optional[int]) -- 長辺の最大長(ピクセル数)。超えていたら縮小する。

  • classes (Optional[numpy.ndarray]) -- クラスIDのリスト

  • confs (Optional[numpy.ndarray]) -- confidenceのリスト (None可)

  • bboxes (numpy.ndarray) -- xmin/ymin/xmax/ymaxのリスト (それぞれ0.0 ~ 1.0)

  • class_names (Optional[Sequence[str]]) -- クラスID→クラス名のリスト (None可)

  • conf_threshold (float) -- この値以上のオブジェクトのみ描画する

pytoolkit.od.rbb_sortkey(bb)[ソース]

real_bboxesのソートキーを作って返す。

pytoolkit.optimizers module

Kerasのoptimizer関連。

class pytoolkit.optimizers.SGDEx(learning_rate, lr_multipliers=None, momentum=0.9, decay=0.0, nesterov=True, lr=None, **kwargs)[ソース]

ベースクラス: tensorflow.python.keras.optimizer_v2.gradient_descent.SGD

重み別に学習率の係数を設定できるSGD。

lr_multipliersは、Layerまたは各weightのnameをキーとし、学習率の係数を値としたdict。

例:

lr_multipliers = {basenet: 0.1}
get_config()[ソース]

Returns the config of the optimizer.

An optimizer config is a Python dictionary (serializable) containing the configuration of an optimizer. The same optimizer can be reinstantiated later (without any saved state) from this configuration.

戻り値

Python dictionary.

pytoolkit.preprocessing module

前処理関連。

pytoolkit.preprocessing.encode_binary(s, true_value, false_value)[ソース]

列の2値化。

パラメータ

s (pandas.core.series.Series) --

戻り値の型

pandas.core.series.Series

pytoolkit.preprocessing.encode_ordinal(s, values)[ソース]

順序のあるカテゴリ変数の数値化。

パラメータ

s (pandas.core.series.Series) --

戻り値の型

pandas.core.series.Series

pytoolkit.preprocessing.encode_cyclic(s, min_value=0, max_value=1)[ソース]

周期性のある数値のsin/cos化。

パラメータ
  • s (pandas.core.series.Series) --

  • min_value (float) --

  • max_value (float) --

戻り値の型

pandas.core.frame.DataFrame

class pytoolkit.preprocessing.NullTransformer[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

何もしないTransformer。

fit(X, y=None)[ソース]
transform(X, y=None)[ソース]
class pytoolkit.preprocessing.DataFrameToNDArray[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

DataFrameをndarrayに変換するだけのTransformer。

fit(X, y=None)[ソース]
transform(X, y=None)[ソース]
class pytoolkit.preprocessing.ResidualTransformer(pred_train, pred_test)[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

TransformedTargetRegressorなどと組み合わせて残差を学習するようにするためのTransformer。

fit(X, y=None)[ソース]
transform(X, y=None)[ソース]
inverse_transform(X, y=None)[ソース]
class pytoolkit.preprocessing.FeaturesEncoder(category='category', binary_fraction=0.01, iszero_fraction=0.01, isnull_fraction=0.01, rare_category_fraction=0.01, ordinal_encoder=None, onehot_encoder=None, count_encoder=None, target_encoder=None, ignore_cols=None)[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

特徴を学習器に与えられるように色々いい感じに変換するクラス。

パラメータ
  • category (str) -- カテゴリ変数の処理方法 - "category": Ordinalエンコードしてcategory型にする (LightGBMとか用) - "ordinal": Ordinalエンコードしてobject型にする (XGBoost/CatBoostとか用) - "onehot": One-hotエンコードしてbool型にする (NNとか用)

  • binary_fraction (float) -- 0-1

  • iszero_fraction (float) -- 0-1

  • isnull_fraction (float) -- 0-1

  • ordinal_encoder (sklearn.base.BaseEstimator) -- OrdinalEncoderのインスタンス

  • onehot_encoder (sklearn.base.BaseEstimator) -- OneHotEncoderのインスタンス

  • count_encoder (sklearn.base.BaseEstimator) -- CountEncoderのインスタンス

  • target_encoder (sklearn.base.BaseEstimator) -- TargetEncoderのインスタンス

  • ignore_cols (typing.Sequence[str]) -- 無視する列名

  • rare_category_fraction (float) --

fit(X, y)[ソース]
fit_transform(X, y=None, **fit_params)[ソース]

Fit to data, then transform it.

Fits transformer to X and y with optional parameters fit_params and returns a transformed version of X.

パラメータ
  • X (array-like of shape (n_samples, n_features)) -- Input samples.

  • y (array-like of shape (n_samples,) or (n_samples, n_outputs), default=None) -- Target values (None for unsupervised transformations).

  • **fit_params (dict) -- Additional fit parameters.

戻り値

X_new -- Transformed array.

戻り値の型

ndarray array of shape (n_samples, n_features_new)

transform(X, y=None)[ソース]
class pytoolkit.preprocessing.OrdinalEncoder(cols=None, return_df=True, output_dtype='category')[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

Ordinal Encoding。

Category Encoders <http://contrib.scikit-learn.org/categorical-encoding/> 風のインターフェースにしてみる。 (全部は作っていない)

nanはfit時に存在するならvalue扱いにして、test時にのみ出てきたらerrorにする。 fit時に出てこなかったカテゴリもerrorにする。

fit(X, y=None)[ソース]
transform(X, y=None)[ソース]
class pytoolkit.preprocessing.CountEncoder(cols=None, return_df=True, handle_missing='return_nan')[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

Count Encoding。

Category Encoders <http://contrib.scikit-learn.org/categorical-encoding/> 風のインターフェースにしてみる。 (全部は作っていない)

fit(X, y=None)[ソース]
transform(X, y=None)[ソース]
class pytoolkit.preprocessing.TargetEncoder(cols=None, return_df=True, min_samples_leaf=3, order=True)[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

Target Encoding。

foldを切った方が少し安全という話はあるが、 trainとtestで傾向が変わりかねなくてちょっと嫌なのでfold切らないものを自作した。

お気持ちレベルだけどtargetそのままじゃなくrank化するようにしてみた(order=True)り、 min_samples_leaf未満のカテゴリはnp.nanになるようにしたり。

fit(X, y)[ソース]
transform(X, y=None)[ソース]
class pytoolkit.preprocessing.Normalizer(cols=None, return_df=True, clip_range=(- 7, 7))[ソース]

ベースクラス: sklearn.base.BaseEstimator, sklearn.base.TransformerMixin

列ごとに値の傾向を見てできるだけいい感じにスケーリングなどをする。

fit(X, y=None)[ソース]
transform(X, y=None)[ソース]

pytoolkit.schedules module

学習率のスケジューリング。

class pytoolkit.schedules.CosineAnnealing(initial_learning_rate, decay_steps, warmup_steps=1000, min_fraction=0.01, name=None)[ソース]

ベースクラス: tensorflow.python.keras.optimizer_v2.learning_rate_schedule.LearningRateSchedule

Cosine Annealing without restart。

パラメータ
  • initial_learning_rate (float) -- 初期学習率

  • decay_steps (int) -- 全体のステップ数 (len(train_set) // (batch_size * app.num_replicas_in_sync * tk.hvd.size()) * epochs)

  • warmup_steps (int) -- 最初にlinear warmupするステップ数。既定値は1000。ただし最大でdecay_steps // 8。

  • min_fraction (float) -- 初期学習率に対する最小の倍率

  • name (str) -- 名前

参照

get_config()[ソース]
class pytoolkit.schedules.LinearDecay(initial_learning_rate, decay_steps, warmup_steps=1000, min_fraction=0.01, name=None)[ソース]

ベースクラス: tensorflow.python.keras.optimizer_v2.learning_rate_schedule.LearningRateSchedule

学習率を線形に減らす(& 最初はwarmup)。

パラメータ
  • initial_learning_rate (float) -- 初期学習率

  • decay_steps (int) -- 全体のステップ数 (len(train_set) // (batch_size * app.num_replicas_in_sync * tk.hvd.size()) * epochs)

  • warmup_steps (int) -- 最初にlinear warmupするステップ数。既定値は1000。ただし最大でdecay_steps // 8。

  • min_fraction (float) -- 初期学習率に対する最小の倍率

  • name (str) -- 名前

参照

get_config()[ソース]
class pytoolkit.schedules.ExponentialDecay(initial_learning_rate, decay_steps, warmup_steps=1000, min_fraction=0.01, name=None)[ソース]

ベースクラス: tensorflow.python.keras.optimizer_v2.learning_rate_schedule.LearningRateSchedule

学習率を指数的に減らす(& 最初はwarmup)。

パラメータ
  • initial_learning_rate (float) -- 初期学習率

  • decay_steps (int) -- 全体のステップ数 (len(train_set) // (batch_size * app.num_replicas_in_sync * tk.hvd.size()) * epochs)

  • warmup_steps (int) -- 最初にlinear warmupするステップ数。既定値は1000。ただし最大でdecay_steps // 8。

  • min_fraction (float) -- 初期学習率に対する最小の倍率

  • name (str) -- 名前

参照

get_config()[ソース]

pytoolkit.table module

pandasなどなど関連。

pytoolkit.table.label_encoding(values, values_set)[ソース]

ラベルエンコーディング。

パラメータ
  • values (Union[pandas.core.series.Series, numpy.ndarray]) --

  • values_set (Iterable) --

pytoolkit.table.target_encoding(values, values_train, target_train, min_samples_leaf=3, smoothing=1.0)[ソース]

ターゲットエンコーディング。

パラメータ
  • values (Union[pandas.core.series.Series, numpy.ndarray]) --

  • values_train (Union[pandas.core.series.Series, numpy.ndarray]) --

  • target_train (numpy.ndarray) --

  • min_samples_leaf (int) --

  • smoothing (float) --

pytoolkit.table.make_target_encoding_map(values_train, target_train, min_samples_leaf=3, smoothing=1.0)[ソース]

ターゲットエンコーディングの変換用dictの作成。

パラメータ
  • values_train (Union[pandas.core.series.Series, numpy.ndarray]) --

  • target_train (numpy.ndarray) --

  • min_samples_leaf (int) --

  • smoothing (float) --

戻り値の型

Dict[Any, numpy.float32]

pytoolkit.table.safe_apply(s, fn)[ソース]

nan以外にのみapply

パラメータ

s (pandas.core.series.Series) --

戻り値の型

pandas.core.series.Series

pytoolkit.table.add_col(df, column_name, values)[ソース]

上書きしないようにチェックしつつ列追加。

パラメータ
  • df (pandas.core.frame.DataFrame) --

  • column_name (str) --

  • values (Sequence[Any]) --

戻り値の型

None

pytoolkit.table.add_cols(df, column_names, values)[ソース]

上書きしないようにチェックしつつ列追加。

パラメータ
  • df (pandas.core.frame.DataFrame) --

  • column_names (List[str]) --

  • values (Sequence[Any]) --

戻り値の型

None

pytoolkit.table.group_columns(df, cols=None)[ソース]

列を型ごとにグルーピングして返す。

パラメータ
  • df (pandas.core.frame.DataFrame) -- DataFrame

  • cols (Optional[Sequence[str]]) -- 対象の列名の配列

戻り値

種類ごとの列名のlist
  • "binary": 二値列

  • "numeric": 数値列

  • "categorical": カテゴリ列(など)

  • "unknown": その他

戻り値の型

Dict[str, List[str]]

pytoolkit.table.eda(df_train, df_test)[ソース]

色々調べて表示する。(jupyter用)

パラメータ
  • df_train (pandas.core.frame.DataFrame) --

  • df_test (pandas.core.frame.DataFrame) --

pytoolkit.table.eda_html(df_train, df_test)[ソース]

色々調べて結果をHTML化して返す。

パラメータ
  • df_train (pandas.core.frame.DataFrame) --

  • df_test (pandas.core.frame.DataFrame) --

pytoolkit.table.analyze(df)[ソース]

中身を適当に分析してDataFrameに詰めて返す。

パラメータ

df (pandas.core.frame.DataFrame) --

pytoolkit.table.compare(df1, df2)[ソース]

同じ列を持つ二つのdfの値を色々比べた結果をdfに入れて返す。

パラメータ
  • df1 (pandas.core.frame.DataFrame) --

  • df2 (pandas.core.frame.DataFrame) --

pytoolkit.table.permutation_importance(score_fn, X, y, greater_is_better, columns=None, n_iter=5, random_state=None, verbose=True)[ソース]

Permutation Importanceを算出して返す。

パラメータ
  • score_fn (Callable[[numpy.ndarray, numpy.ndarray], float]) -- X, yを受け取りスコアを返す関数。

  • X (pandas.core.frame.DataFrame) -- 入力データ

  • y (numpy.ndarray) -- ラベル

  • greater_is_better (bool) -- スコアが大きいほど良いならTrue

  • columns (Optional[Sequence[str]]) -- 対象の列

  • n_iter (int) -- 繰り返し回数

  • random_state -- seed

  • verbose (bool) -- プログレスバーを表示するか否か

戻り値

columnとimportanceの列を持つDataFrame

戻り値の型

pd.DataFrame

pytoolkit.table.shuffled_score(score_fn, X, c, y, n_iter=5, random_state=None)[ソース]

Permutation Importanceのための処理。

c列をシャッフルしたときのスコアの平均値を返す。

パラメータ
  • score_fn (Callable[[numpy.ndarray, numpy.ndarray], float]) -- X, yを受け取りスコアを返す関数。

  • X (pandas.core.frame.DataFrame) -- 入力データ

  • c (str) -- 対象の列

  • y (numpy.ndarray) -- ラベル

  • n_iter (int) -- 繰り返し回数

  • random_state -- seed

戻り値

スコア

戻り値の型

float

pytoolkit.table.latlon_distance(lat1, lon1, lat2, lon2)[ソース]

2地点間の距離。

パラメータ
  • lat1 (float) -- 地点1の緯度[°]

  • lon1 (float) -- 地点1の経度[°]

  • lat2 (float) -- 地点2の緯度[°]

  • lon2 (float) -- 地点2の経度[°]

戻り値

距離[km]

戻り値の型

float

参照

pytoolkit.table.reduce_mem_usage(df)[ソース]

Kaggleで有名な(?)処理。

パラメータ

df (pandas.core.frame.DataFrame) --

戻り値の型

pandas.core.frame.DataFrame

pytoolkit.threading module

スレッド関連。

pytoolkit.threading.get_pool()[ソース]

色々使いまわす用スレッドプール。

pytoolkit.training module

学習関連。

tk.evaluations.EvalsType を返す関数を前提にしたヘルパー関数など。

pytoolkit.training.multi_run(func, runs=5)[ソース]

funcをruns回実行して結果の平均を返す。

パラメータ
  • func (Callable[[], Dict[str, Any]]) --

  • runs (int) --

戻り値の型

Dict[str, Any]

pytoolkit.training.hpo(func, params, score_name, direction='minimize', n_trials=100)[ソース]

ハイパーパラメータ探索。

パラメータ
  • params (Dict[str, Tuple[str, Dict[str, Any]]]) -- キーがパラメータ名、値がtupleのdict。

  • score_name (str) -- decorateした関数が返したdictのうちスコアとして使用する値を示すキー。

  • direction (str) -- 最適化方向。minimize or maximize。

  • func (Callable[[...], Dict[str, Any]]) --

  • n_trials (int) --

戻り値の型

None

paramsの値は、以下の2つの値のタプル - trial.suggest_*の「*」の部分 (str) - trial.suggest_*に渡す**kwargs (dict)

例:

@tk.training.hpo(
    params={
        "a": ("categorical", {"choices": [32, 64]}),
        "b": ("discrete_uniform", {"low": 0.1, "high": 1.0, "q": 0.1}),
        "c": ("float", {"low": 0.1, "high": 1.0, "step": 0.1, "log": False})
        "d": ("int", {"low": 1, "high": 10, "step": 1, "log": False})
        "e": ("loguniform", {"low": 1, "high": 10})
        "f": ("uniform", {"low": 1, "high": 10})
    },
    score_name="acc",
    direction="maximize",
    n_trials=100,
)
def train(a, b, c, d, e, f):
    return {"acc": acc}

int/floatのstep, logはoptional。

pytoolkit.typing module

型ヒント関連。

pytoolkit.utils module

各種ユーティリティ

pytoolkit.utils.find_by_name(arr, name)[ソース]

__name__から要素を検索して返す。

pytoolkit.utils.normalize_tuple(value, n)[ソース]

n個の要素を持つtupleにして返す。

パラメータ

n (int) --

戻り値の型

Tuple[int, ...]

pytoolkit.utils.memoize(func)[ソース]

単純なメモ化のデコレーター。

pytoolkit.utils.dump(value, filename, compress=0, protocol=None, cache_size=None)[ソース]

ディレクトリを自動的に作るjoblib.dump。

pytoolkit.utils.load(filename, mmap_mode=None, skip_not_exist=False)[ソース]

joblib.loadほぼそのまま。

pytoolkit.utils.tqdm(iterable=None, desc=None, total=None, leave=True, **kwargs)[ソース]

ascii=Trueでncols=100なtqdm。

pytoolkit.utils.trange(*args, **kwargs)[ソース]

ascii=Trueでncols=100なtqdm.trange。

pytoolkit.utils.tenumerate(iterable, **tqdm_kwargs)[ソース]

ascii=Trueでncols=100なtqdm.contrib.tenumerate。

pytoolkit.utils.tzip(iter1, *iter2plus, **tqdm_kwargs)[ソース]

ascii=Trueでncols=100なtqdm.contrib.tzip。

pytoolkit.utils.tmap(function, *sequences, **tqdm_kwargs)[ソース]

ascii=Trueでncols=100なtqdm.contrib.tmap。

pytoolkit.utils.tqdm_write(s, file=None, end='\n', nolock=False)[ソース]

tqdm中に何か出力したいとき用のやつ。

pytoolkit.utils.tqdm_external_write_mode(file=None, nolock=False)[ソース]

tqdm中に何か出力したいとき用のやつ。

pytoolkit.utils.better_exceptions()[ソース]

better_exceptionsを有効にする。

pytoolkit.utils.format_exc(color=False, safe=True)[ソース]

例外をbetter_exceptionsで整形して返す。

戻り値の型

str

pytoolkit.utils.format_exception(exc, value, tb, color=False, safe=True)[ソース]

例外をbetter_exceptionsで整形して返す。

戻り値の型

str

pytoolkit.utils.encode_rl_array(masks, desc='encode_rl')[ソース]

encode_rlの配列版。

戻り値の型

List[str]

pytoolkit.utils.encode_rl(mask)[ソース]

Kaggleのセグメンテーションで使われるようなランレングスエンコード。

パラメータ

mask (ndarray) -- 0 or 1のマスク画像 (shapeは(height, width)または(height, width, 1))

戻り値

エンコードされた文字列

戻り値の型

str

pytoolkit.utils.daterange(start, end)[ソース]

startからend-1の日付を列挙

パラメータ
  • start (datetime.date) --

  • end (datetime.date) --

戻り値の型

Iterator[datetime.date]

pytoolkit.validation module

CVなど。

pytoolkit.validation.split(dataset, nfold, split_seed=1, stratify=None)[ソース]

nfold CV。

パラメータ
  • dataset (pytoolkit.data.Dataset) -- 分割する元のデータセット

  • nfold (int) -- 分割数。ただし1の場合は特別に5foldの最初の1個しか実行しないバージョンということにする。 (もうちょっと分かりやすいインターフェースにしたいが利便性と両立する案が無いのでとりあえず…)

  • split_seed (Optional[int]) -- シード値。Noneならシャッフルしない。

  • stratify (Optional[Union[bool, numpy.ndarray]]) -- Trueの場合か、Noneでかつdataset.labelsがndarrayかつndim == 1ならStratifiedKFold。 FalseならKFold。ndarrayの場合はそれを使ってStratifiedKFold。

戻り値の型

Sequence[Tuple[numpy.ndarray, numpy.ndarray]]

pytoolkit.validation.get_dummy_folds(train_set)[ソース]

全データで学習して全データで検証するときのfoldsを返す。

パラメータ

train_set (pytoolkit.data.Dataset) --

pytoolkit.validation.pseudo_labeling(train_set, folds1, test_set, folds2, test_weights=0.5)[ソース]

pseudo labelなdataset, foldsを作って返す。

パラメータ
  • train_set (pytoolkit.data.Dataset) -- 訓練データ

  • folds1 (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) -- 訓練データのfolds

  • test_set (pytoolkit.data.Dataset) -- テストデータ

  • folds2 (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) -- テストデータのfolds

  • test_weights (float) -- 訓練データに対するテストデータの重み

pytoolkit.validation.concat_folds(folds1, folds2, fold2_offset)[ソース]

folds同士をくっつける。

パラメータ
  • folds1 (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) --

  • folds2 (Sequence[Tuple[numpy.ndarray, numpy.ndarray]]) --

  • fold2_offset (int) --

戻り値の型

Sequence[Tuple[numpy.ndarray, numpy.ndarray]]

pytoolkit.vis module

可視化関連。

class pytoolkit.vis.GradCamVisualizer(model, output_index, pooling_class=None)[ソース]

ベースクラス: object

Grad-CAMによる可視化。

パラメータ
  • model (tensorflow.python.keras.engine.training.Model) -- 対象のモデル。画像分類で最後がpooling_class+Dense+softmaxで分類している前提。

  • output_index (int) -- 使う出力(softmax)のインデックス。(クラスのindex)

  • pooling_class (type) -- 分類直前のpoolingのクラス。(既定値はGlobalAveragePooling2D)

draw(source_image, model_inputs, alpha=0.5, interpolation='nearest')[ソース]

ヒートマップ画像を作成して返す。

パラメータ
  • source_image (numpy.ndarray) -- 元画像 (RGB。shape=(height, width, 3))

  • model_inputs (numpy.ndarray) -- モデルの入力1件分。(例えば普通の画像分類ならshape=(1, height, width, 3))

  • alpha (float) -- ヒートマップの不透明度

  • interpolation (str) -- マスクの拡大方法 (nearest, bilinear, bicubic, lanczos)

戻り値

画像 (RGB。shape=(height, width, 3))

戻り値の型

numpy.ndarray

get_mask(model_inputs)[ソース]

可視化してマスクを返す。マスクの値は`[0, 1)`。

pytoolkit.web module

Web関連。

pytoolkit.web.data_url(data, mime_type)[ソース]

小さい画像などのバイナリデータをURLに埋め込んだものを作って返す。

パラメータ
  • data (bytes) -- 埋め込むデータ

  • mime_type (str) -- 例:'image/png'

戻り値

data URL。

戻り値の型

str

Module contents

API。