Как получить промежуточные результаты прогнозов в цикле - PullRequest
1 голос
/ 07 февраля 2020

Необходимо рассчитать время результатов прогнозирования каждого слоя и передать выходные данные модели в качестве входных данных на другой слой. Рассматривая каждый слой как модель и получая промежуточные результаты и передавая эти результаты следующему. Когда я пытаюсь запустить код, возникает ошибка утверждения.

   model = vgg16.VGG16(weights='imagenet')
   filename = 'I:/PhD/SecondYear/Experiment/DNN/image/cat.4001.jpg'
   original_image = load_img(filename, target_size=(224, 224))
   numpy_image = img_to_array(original_image)
   input_image = np.expand_dims(numpy_image, axis=0)

   processed_image_vgg16 = vgg16.preprocess_input(input_image.copy())
   new_input=keras.layers.Input(shape=(224, 224, 3))
   input=new_input

   def profiling(model, test_input):
   next_layer = input
   for layer in model.layers:       
     out= layer(next_layer)
     #next_layer = out
     intermediate_model= keras.Model(next_layer,out)
     start = time.time()
     x = intermediate_model.predict(test_input)
     next_layer = out
     end = time.time() - start
     print(end)

profiling(model,processed_image_vgg16)

1 Ответ

2 голосов
/ 07 февраля 2020

Я сделал небольшие изменения в вашей функции:

def profiling(model, test_input):
  data_input = test_input
  for layer in model.layers: 

    start = time.time()
    im_input = tf.keras.layers.Input(shape=layer.input.shape[1:])
    # Get current layer's input shape and create input tensor.
    im_output = layer(im_input)
    # Apply current layer's operation on current input.
    intermediate_model= keras.models.Model(im_input,im_output) 
    # Create model from input and output 
    data_input = intermediate_model.predict(data_input)
    # predict and update output to data_input variable which will be used in next iteration. 
    end = time.time() - start
    print("Layer: ",type(layer).__name__,end)

profiling(model,processed_image_vgg16)

# output:
# Layer:  InputLayer 0.026311635971069336
# Layer:  Conv2D 0.048013925552368164
# Layer:  Conv2D 0.11106109619140625
# Layer:  MaxPooling2D 0.03328657150268555
# ...

Это даст вам время прогнозирования для суб-модели по слоям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...