Я хочу реализовать более быстрый подход к скользящему окну, называемый «OverFeat», описанный в следующей статье.
Ссылка: https://arxiv.org/abs/1312.6229
Я обучал MNIST Набор данных для прогнозирования цифр с помощью реализации L eNet 5. Я знаю, что мне нужно настроить сетевые слои, чтобы можно было получить C -мерный (c = classses) массив выходных данных для моего примененного windows. Но я не знаю, как это сделать, чтобы он выводил этот C -мерный массив, который имеет смысл. Мои текущие слои: (L eNet -5 стандартных слоев)
Ввод: (100,28,28,1)
Conv1: (100,28,28,32)
Pool1: (100,14,14,32)
Conv2: (100,14,14,64)
Pool2: (100,7,7,64) )
Pool2_flat: (100,3136)
Плотность: (100,1024)
Выпадение: (100,1024)
Logits: (100 , 10)
Теперь, если я правильно понял документ, я должен избавиться от слоя Pool2_flat и плотного слоя, но как я могу расположить слои, чтобы получить C -мерный выходной массив для * 1049? * во входном изображении?
Мое входное изображение - 1920x1080x1. Я не знаю, как это будет работать с этими большими изображениями, поэтому, возможно, мне придется масштабировать изображения для ввода перед выводом.
Я использовал оценки для обучения, оценки и прогнозирования. В статье написано, что не меняют архитектуру сетей для обучения, а для вывода. Я сохранил свой график и контрольные точки, но когда я хочу сделать вывод, я не могу обратиться к измененной сети, потому что предсказание класса tf.estimator использует сохраненный график (из обучения).
Является ли это можно использовать измененную сеть для вывода, используя класс оценки высокого уровня?
def lenet_model_fn_big(features, labels, mode):
features = tf.reshape(features["x"], [-1, 1920, 1080, 1], name="input")
# Convolution Layer 1
conv1 = tf.layers.conv2d(inputs=features,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
….
# Logits Layer
logits = tf.layers.dense(inputs=dropout,
units=10)
predictions = {
"classes" : tf.argmax(input=logits, axis=1),
"probs" : tf.nn.softmax(logits=logits, name="softmax_tensor")
}
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)
, чтобы получить предсказания, которые я вызываю:
mnist_classifier = tf.estimator.Estimator(model_fn=ln.lenet_model_fn_big,
model_dir=config_dict["model_dir"])
#params=tf.estimator.ModeKeys.PREDICT || config_dict)
# Prepare the input
predict_input_fn = tf.estimator.inputs.numpy_input_fn(x={"x":imageTensors},
num_epochs=1,
shuffle=False)
for single_prediction in mnist_classifier.predict(input_fn=predict_input_fn):
predicted_class = single_prediction['classes']
probability = single_prediction['probs']
print(predicted_class, probability)
К сожалению, это не работает и дает мне следующая ошибка:
for single_prediction in mnist_classifier.predict(input_fn=predict_input_fnF:
TypeError: unhashable type: 'Dimension'