Ошибка при удалении первого слоя модели керас - PullRequest
0 голосов
/ 11 марта 2020
import numpy as np
from keras.applications.vgg19 import decode_predictions
from prettytable import PrettyTable
import time
from keras import backend as K
from tensorflow import keras
from tensorflow.python import keras
from keras import models, layers, Model, Input
import tensorflow as tf

model_2=keras.models.load_model('model_2.h5',compile=False)
model_2.summary()

predictions1= np.load('D:/predictions_result.npy')
def profiler(model, test_input):
 data_input=test_input
 for layer in model.layers:
    start = time.time()
    im_imput=keras.layers.Input(batch_shape=model.get_layer(layer.name).get_input_shape_at(0))
    im_out = layer(im_imput)
    new_model = keras.models.Model(inputs=im_imput,outputs=im_out)
    data_input = new_model.predict(data_input)
    end = time.time() - start
    print(end)
    result=1


profiler(model_2,predictions1)

tmp=np.zeros((1,224,224,64))

for i in range(0,1):
   tmp[i,:,:,:]=predictions1[i,:]

predictions2 = model_2.predict(tmp)
label_vgg19 = decode_predictions(predictions2)
print ('label_vgg19 =', label_vgg19)

Когда я пытаюсь запустить приведенный выше код, я получаю ошибку ниже. У меня вопрос как убрать первый слой модели после загрузки. Сначала я делю модель VGG на подмодели, а затем загружаю подмодель. Я пробовал разные подходы, но ни один не работает. Помощь очень ценится.

  Traceback (most recent call last):
  File "C:/Users/40227422/PycharmProjects/model_partititon/model_2_sock.py", line 42, in <module>
  profiler(model_2,predictions1)
  File "C:/Users/40227422/PycharmProjects/model_partititon/model_2_sock.py", line 28, in the 
    profiler
  data_input = new_model.predict(data_input)
  File "C:\Users\40227422\AppData\Local\Continuum\miniconda3\envs\tensorflow\lib\site- 
  packages\tensorflow\python\keras\engine\training_utils.py", line 332, in standardize_input_data
  ' but got array with shape ' + str(data_shape))
  ValueError: Error when checking input: expected input_1 to have shape (224, 224, 3) but got array 
  with shape (224, 224, 64)

, когда я пытаюсь использовать kerassurgeon для удаления слоя, используя приведенный ниже код, я получаю ошибку ValueError: недостаточно значений для распаковки (ожидается 2, получено 0)

 from kerassurgeon import Surgeon
 surgeon = Surgeon(model_2)
 layer_1 = model_2.layers[0] # selecting 2nd layer

 surgeon.add_job('delete_layer', layer_1)
 new_model = surgeon.operate()

1 Ответ

0 голосов
/ 31 марта 2020

Мне не удалось воссоздать ошибку, с которой вы столкнулись. Может быть, вы можете поделиться воспроизводимым кодом. Ниже опций я попытался удалить слой, и он работал.

from kerassurgeon.operations import delete_layer
# delete layer_1 from a model
model = delete_layer(model_2, layer_1)

ИЛИ

# delete layer_1 from a model
from kerassurgeon import Surgeon
surgeon = Surgeon(model_2)
surgeon.add_job('delete_layer', layer_1)
new_model = surgeon.operate()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...