Многие поиски предоставили только методы для сброса уже имеющихся слоев или восстановления их до того состояния, в котором они были при начале работы с моделью.
Возможно, это далеко не завершено, но, возможно, кто-то может построить его!
import tensorflow as tf
import tensorflow.keras.backend as K
def untrain_layer(layer):
initial_weights = layer.weights
new_weights = []
for w in initial_weights:
print(w.name)
if "beta" in w.name:
new_weights.append(K.eval(tf.keras.initializers.zeros())(w.shape))
elif "gamma" in w.name:
new_weights.append(K.eval(tf.keras.initializers.ones())(w.shape))
elif "moving_mean" in w.name:
new_weights.append(K.eval(tf.keras.initializers.zeros())(w.shape))
elif "moving_variance" in w.name:
new_weights.append(K.eval(tf.keras.initializers.ones())(w.shape))
else:
new_weights.append(K.eval(tf.keras.initializers.glorot_uniform())(w.shape))
layer.set_weights(new_weights)
Использование:
import tensorflow_hub as hub
feature_extractor = hub.KerasLayer(URL, True, input_shape=(IMG_SIZE, IMG_SIZE, 3))
untrain_keraslayer(feature_extractor)