Я хотел бы повторно обучить предварительно обученную модель ResNet-50 с помощью TensorFlow slim и использовать ее позже для целей классификации.
ResNet-50 рассчитан на 1000 классов, но я бы хотел, чтобы на выходе было всего 10 классов (типов растительного покрова).
Во-первых, я пытаюсь закодировать его только для одного изображения, что я могу обобщить позже. Итак, это мой код:
from tensorflow.contrib.slim.nets import resnet_v1
import tensorflow as tf
import tensorflow.contrib.slim as slim
import numpy as np
batch_size = 1
height, width, channels = 224, 224, 3
# Create graph
inputs = tf.placeholder(tf.float32, shape=[batch_size, height, width, channels])
with slim.arg_scope(resnet_v1.resnet_arg_scope()):
logits, end_points = resnet_v1.resnet_v1_50(inputs, is_training=False)
saver = tf.train.Saver()
with tf.Session() as sess:
saver.restore(sess, 'd:/bitbucket/cnn-lcm/data/ckpt/resnet_v1_50.ckpt')
representation_tensor = sess.graph.get_tensor_by_name('resnet_v1_50/pool5:0')
# list of files to read
filename_queue = tf.train.string_input_producer(['d:/bitbucket/cnn-lcm/data/train/AnnualCrop/AnnualCrop_735.jpg'])
reader = tf.WholeFileReader()
key, value = reader.read(filename_queue)
img = tf.image.decode_jpeg(value, channels=3)
im = np.array(img)
im = im.reshape(1,224,224,3)
predict_values, logit_values = sess.run([end_points, logits], feed_dict= {inputs: im})
print (np.max(predict_values), np.max(logit_values))
print (np.argmax(predict_values), np.argmax(logit_values))
#img = ... #load image here with size [1, 224,224, 3]
#features = sess.run(representation_tensor, {'Placeholder:0': img})
Я немного смущен тем, что будет дальше (мне нужно открыть график, или мне следует загрузить структуру сети и загрузить веса, или загрузить пакеты. Также есть проблема с формой изображения. универсальные документы, которые нелегко интерпретировать:/
Любые советы, как исправить код, чтобы он соответствовал моим целям?
Тестовое изображение: AnnualCrop735