AttributeError: Слой «input_4» имеет несколько входящих узлов с различными выходными формами - PullRequest
0 голосов
/ 03 марта 2020

Я получаю ошибку ниже. "AttributeError: Слой" input_4 "имеет несколько входящих узлов с разными выходными формами. Следовательно, понятие выходной формы плохо определено для слоя". Вместо этого используйте get_output_shape_at (node_index) ".

Код прекрасно работает без запуска в контейнере Docker. У меня два контейнера docker в обоих контейнерах docker У меня одна и та же версия TensorFlow версии 2.1. 0 и Keras 2.2.4-tf. Однако в предыдущей системе я запускал код на windows машине TensorFlow версии 1.12.0 и 2.1.6-tf Спасибо, помощь очень важна. Я запускаю TensorFlow в * Контейнер 1016 * с использованием этого 1 учебного кода. Код для файла Docker приведен ниже.

Docker file

FROM tensorflow/tensorflow:latest-py3

RUN pip install -q keras

RUN pip install prettytable

RUN pip install pillow

Python Код

import numpy as np
from keras.applications.vgg19 import decode_predictions
from tensorflow.python.keras.models import load_model
from prettytable import PrettyTable
import time
from keras import backend as K
from tensorflow import keras
from tensorflow.python import keras
import time

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

predictions1= np.load('predictions_result.npy')
times=[]
def profiler(model):
   layer_input = keras.layers.Input(batch_shape=model.get_layer('input_4').get_input_shape_at(0))
   x = layer_input
   t = PrettyTable( ['Layer', 'Latency (milliseconds)', 'Output (bytes)'] )
   for layer in model.layers:
      x = layer( x )
    # input and output of layer
      result = 1
      output_shape_list = []
      for i in layer.output_shape[1:]:
        result = result * i
        output_shape_list.append( i )

    intermediate_model = keras.Model( layer_input, x )
    start = time.time()
    intermediate_model = intermediate_model.predict(predictions1)
    np.save('predictions_result', intermediate_model)
    end = time.time() - start
    print(end)
    times.append(end)

    def convert_bytes(result):
        for x in ['bytes', 'KB', 'MB', 'GB', 'TB']:
            if result < 1024.0:
                return "%3.1f %s" % (result, x)
            result /= 1024.0
        return result
    t.add_row([type( layer ).__name__, round( end*1000, 2 ),  convert_bytes( result*4 )])
 print(t)

profiler(model_2)
print("Total Latency(milliseconds):", round(sum(times*1000),2))
tmp=np.zeros((1,28,28,512))

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)

1 Ответ

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

Проблема возникает в следующей строке

`for i in layer.output_shape[1:]:'

Исправлено

shape=layer.get_output_at( 0 ).get_shape().as_list()
for i in shape[1:]:
  result = result * i 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...