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