Я бы хотел обучить нейронную сеть InceptionV3 с нуля.У меня уже есть запущенная реализация, которая использует этот модуль TensorFlow Hub: https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1 и выполняет точную настройку с использованием включенных предварительно обученных весов.
Теперь я хотел бы использовать тот же TensorFlowМодуль-концентратор , но отбросьте предоставленные веса и используйте мой собственный инициализатор ядра (например, tf.initializers.truncated_normal, tf.initializers.he_normal и т. Д.).
Как я могу изменить обучаемые переменные в модуле TFHub, чтобы использовать пользовательский инициализатор?Просто чтобы прояснить ситуацию, я хочу заменить предварительно обученные веса во время выполнения и просто сохранить архитектуру модели.Пожалуйста, дайте мне знать, действительно ли я должен использовать TFSlim или модельный зоопарк.
Вот что у меня есть:
import tensorflow as tf
import tensorflow_hub as hub
tfhub_module_url = 'https://tfhub.dev/google/imagenet/inception_v3/feature_vector/1'
initializer = tf.truncated_normal
def main(_):
_graph = tf.Graph()
with _graph.as_default():
module_spec = hub.load_module_spec(tfhub_module_url)
height, width = hub.get_expected_image_size(module_spec)
resized_input_tensor = tf.placeholder(tf.float32, [None, height, width, 3], name='resized_input_tensor')
m = hub.Module(module_spec, trainable=True)
bottleneck_tensor = m(resized_input_tensor)
trainable_vars = tf.trainable_variables()
# TODO: This fails, because this probably isn't how this is supposed to be done:
for trainable_var in trainable_vars:
trainable_var.initializer = tf.initializers.he_normal
with tf.Session(graph=_graph) as sess:
print(trainable_vars)
tf.logging.set_verbosity(tf.logging.INFO)
tf.app.run()
Как правильно это сделать?