pytoolkit.tf.layers module

tf.kerasのレイヤー関連。

class pytoolkit.tf.layers.CVPick(*args, **kwargs)[ソース]

ベースクラス: Layer

CVのモデルを一度に学習するための前処理レイヤー。

学習時はfold_indexに一致しないところだけ出力。 推論時はfold_indexに一致するところだけ出力。(out-of-fold prediction用)

サンプル

def _create_model(
    num_features: int, nfold: int
) -> tuple[tf.keras.models.Model, tf.keras.models.Model]:
    input_features = tf.keras.Input((num_features,), name="features")
    input_fold = tf.keras.Input((), dtype="int32", name="fold")

    fold_models = [
        _create_fold_model(num_features, fold_index)
        for fold_index in range(nfold)
    ]
    x = pytoolkit.tf.layers.CVMerge()(
        [
            m(pytoolkit.tf.layers.CVPick(fold_index)([
                input_features, input_fold
            ]))
            for fold_index, m in enumerate(fold_models)
        ]
        + [input_fold]
    )
    train_model = tf.keras.models.Model([input_features, input_fold], x)

    x = tf.keras.layers.average([m(input_features) for m in fold_models])
    infer_model = tf.keras.models.Model(input_features, x)

    return train_model, infer_model

def _create_fold_model(
    num_features: int, fold_index: int
) -> tf.keras.models.Model:
    inputs = x = tf.keras.Input((num_features,))
    x = tf.keras.layers.Dense(512, activation="gelu")(x)
    x += tf.keras.layers.Dense(512, activation="gelu")(x)
    x += tf.keras.layers.Dense(512, activation="gelu")(x)
    x = tf.keras.layers.Dense(1, activation="sigmoid")(x)
    return tf.keras.models.Model(inputs, x,
        name=f"fold_model_{fold_index + 1}"
    )
パラメータ:

fold_index (int) --

compute_output_shape(input_shape)[ソース]

出力のshapeを返す。

call(inputs, training=None)[ソース]

処理。

get_config()[ソース]

保存。

class pytoolkit.tf.layers.CVMerge(*args, **kwargs)[ソース]

ベースクラス: Layer

CVのモデルを一度に学習するための後処理レイヤー。

学習時はfoldに一致しないところだけ集めて平均。 推論時はfoldに一致するところだけ集めて出力。(out-of-fold prediction用)

compute_output_shape(input_shape)[ソース]

出力のshapeを返す。

call(inputs, training=None)[ソース]

処理。