Можете ли вы отвлечься tenorsflow_hub.KerasLayer? - PullRequest
0 голосов
/ 30 марта 2020

Я реализовал свою собственную версию MobileNet в TensorFlow и хотел бы проверить ее, сравнив ее с официальной tensorflow_hub версией.

Я могу заставить что-то работать легко, так как:

URL = "https://tfhub.dev/google/imagenet/mobilenet_v1_100_224/feature_vector/4"
model = tf.keras.Sequential([
    hub.KerasLayer(URL, True, input_shape=(IMG_SIZE, IMG_SIZE, 3)),
    Layers.Dropout(0.2),
    Layers.Dense(len(class_names))
])

Но эта модель уже обучена. Я пытался дозвониться до initializer с, но у tensorflow_hub.KerasLayer с их нет. Я также попытался сбросить все веса с помощью glorot_uniform() и RandomUniform(), но затем модель не учится вообще (и не мой, когда я делаю ту же рандомизацию весов).

Можете ли вы повторно инициализировать предварительно обученную модель?

1 Ответ

0 голосов
/ 30 марта 2020

Многие поиски предоставили только методы для сброса уже имеющихся слоев или восстановления их до того состояния, в котором они были при начале работы с моделью.

Возможно, это далеко не завершено, но, возможно, кто-то может построить его!

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...