Python AttributeError:layer";输入“U 4”;具有多个具有不同输出形状的入站节点
属性错误:层“input_4”有多个入站节点,具有不同的 输出形状。因此,层的输出形状概念定义错误”。使用 取而代之的是在(节点索引)处获取_输出_形状_” 这段代码在Docker容器上运行非常好 两个docker容器上的docker容器的TensorFlow版本相同 版本2.1.0和Keras 2.2.4-tf。但是,在以前的系统上,我运行了 windows机器上的代码TensorFlow版本1.12.0和2.1.6-tf谢谢,非常感谢您的帮助 我使用本教程在docker容器中运行TensorFlow 下面 Docker文件Python AttributeError:layer";输入“U 4”;具有多个具有不同输出形状的入站节点,python,docker,tensorflow,keras,deep-learning,Python,Docker,Tensorflow,Keras,Deep Learning,属性错误:层“input_4”有多个入站节点,具有不同的 输出形状。因此,层的输出形状概念定义错误”。使用 取而代之的是在(节点索引)处获取_输出_形状_” 这段代码在Docker容器上运行非常好 两个docker容器上的docker容器的TensorFlow版本相同 版本2.1.0和Keras 2.2.4-tf。但是,在以前的系统上,我运行了 windows机器上的代码TensorFlow版本1.12.0和2.1.6-tf谢谢,非常感谢您的帮助 我使用本教程在docker容器中运行Tensor
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)
将numpy导入为np
从keras.applications.vgg19导入解码\u预测
从tensorflow.python.keras.models导入负载模型
从prettytable导入prettytable
导入时间
从keras导入后端为K
从tensorflow进口keras
从tensorflow.python导入keras
导入时间
模型_2=加载模型('model_2.h5',compile=False)
模型2.摘要()
predictions1=np.load('predictions\u result.npy')
时间=[]
def档案器(型号):
图层输入=keras.layers.input(批处理形状=模型。获取图层(“输入4”)。获取(0)处的输入形状)
x=图层输入
t=PrettyTable(['Layer','Latency(毫秒)','Output(bytes)'))
对于model.layers中的图层:
x=层(x)
#层的输入和输出
结果=1
输出形状列表=[]
对于层中的i。输出_形状[1:]:
结果=结果*i
输出形状列表。追加(i)
中间_模型=keras.model(层_输入,x)
开始=时间。时间()
中间模型=中间模型。预测(预测1)
np.save('预测结果',中间模型)
结束=时间。时间()-开始
列印(完)
times.append(结束)
def convert_字节(结果):
对于x,单位为[‘字节’、‘KB’、‘MB’、‘GB’、‘TB’]:
如果结果<1024.0:
返回“%3.1f%s%”(结果,x)
结果/=1024.0
返回结果
t、 添加行([类型(层)。\uuuuuuu名称\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
打印(t)
剖面仪(型号2)
打印(“总延迟(毫秒):”,四舍五入(总和(乘以*1000),2))
tmp=np.零((1,28,28512))
对于范围(0,1)内的i:
tmp[i,:,:,:]=predictions1[i,:]
预测2=模型2.预测(tmp)
label_vgg19=解码预测(预测2)
打印('label_vgg19=',label_vgg19)
问题出现在下一行
`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
这是一个版本不匹配:请检查您正在docker映像外部运行代码的版本和内部运行的版本。它们可能不同,并且它们之间的api发生了更改。您好,@Yuri-M-Dias我在两个docker容器上都有两个docker容器我有相同的TensorFlow版本2.1.0和Keras 2.2.4-tf。但是,在previo上在我们的系统中,我在windows机器TensorFlow版本1.12.0和2.1.6-tf上运行了代码