Я использую Tensorflow для объединения предварительно обученной модели, которую я загружаю с контрольных точек, и нескольких плотных слоев. Идея состоит в том, чтобы использовать .get_tensor_by_name () , чтобы задействовать Тензор из предварительно обученной модели и ввести его в новые слои после некоторой манипуляции. Затем тренируйте добавленные плотные слои с предварительно натренированными весами, которые все еще заморожены / не могут быть обработаны, не передавая их по имени в оптимизатор. Я хочу использовать / создать конвейер данных TF и понимаю, что поскольку данные теперь являются частью графа, мы не передаем их тензорное значение с помощью feed_dicts. Я уже пробовал это раньше и получал ошибку, что feed_dicts не ожидают значения Tensor. Большинство примеров, которые я вижу онлайн, напрямую использует / передает Tensor данных во входные слои, которые даны явно. Моя проблема заключается в том, что первая часть моего алгоритма использует загруженный график, для которого я не знаю, как я могу передать входной тензор (так как вы не можете видеть явные слои). Вот код, показывающий тип модели, с которой я работаю:
def load_create_model(model_path, X):
with tf.Session(graph=detection_graph) as sess:
detection_graph = tf.Graph()
# Load the graph with the trained states
loader = tf.train.import_meta_graph(model_path + '.meta')
loader.restore(sess, model_path)
# Define labels (Y) tensor
labels = tf.placeholder(tf.float32, [None, 1])
# Get the tensors by their variable name
# Input, normally would pass values via feed_dict
image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
# Desired Output, which will be passed into MLP after manipulations
output_matrix = detection_graph.get_tensor_by_name('concat:0')
# Converting output matrix to desired input structure
outmat_sq = tf.squeeze(output_matrix)
logits_max = tf.squeeze(tf.math.reduce_max(outmat_sq, reduction_indices=[0]))
logits_mean = tf.squeeze(tf.math.reduce_mean(outmat_sq, reduction_indices=[0]))
logodds = tf.concat([logits_max, logits_mean], 0)
logodds = tf.expand_dims(logodds, 0)
logodds.set_shape([None, 1204])
# Added dense layer which will be the only trainable layer.
hidden_w = tf.Variable(tf.random_normal([1204, 500]), name='hidden_w')
hidden_b = tf.Variable(tf.random_normal([500]), name='hidden_b')
out_w = tf.Variable(tf.random_normal([500, 1]), name='out_w')
out_b = tf.Variable(tf.random_normal([1]), name='out_b')
hidden = tf.math.tanh(tf.add(tf.matmul(logodds, hidden_w), hidden_b)) # Inputing logodds
out = tf.math.sigmoid(tf.add(tf.matmul(hidden, out_w), out_b))
return out, detection_graph
Я был бы очень признателен за любую информацию. Также я могу уточнить любые вопросы.
Спасибо