我在Keras的最后一层中使用一些tensorflow函数(reduce_sum和l2_normalize)构建模型,而遇到此问题。我一直在寻找解决方案,但所有解决方案都与“
Keras张量”有关。
这是我的代码:
import tensorflow as tf;
from tensorflow.python.keras import backend as K
vgg16_model = VGG16(weights = 'imagenet', include_top = False, input_shape = input_shape);
fire8 = extract_layer_from_model(vgg16_model, layer_name = 'block4_pool');
pool8 = MaxPooling2D((3,3), strides = (2,2), name = 'pool8')(fire8.output);
fc1 = Conv2D(64, (6,6), strides= (1, 1), padding = 'same', name = 'fc1')(pool8);
fc1 = Dropout(rate = 0.5)(fc1);
fc2 = Conv2D(3, (1, 1), strides = (1, 1), padding = 'same', name = 'fc2')(fc1);
fc2 = Activation('relu')(fc2);
fc2 = Conv2D(3, (15, 15), padding = 'valid', name = 'fc_pooling')(fc2);
fc2_norm = K.l2_normalize(fc2, axis = 3);
est = tf.reduce_sum(fc2_norm, axis = (1, 2));
est = K.l2_normalize(est);
FC_model = Model(inputs = vgg16_model.input, outputs = est);
然后是错误:
ValueError:模型的输出张量必须是TensorFlow的输出
Layer
(因此保留过去的层元数据)。找到:Tensor(“
l2_normalize_3:0”,shape =(?, 3),dtype = float32)
我注意到,在不将fc2层传递给这些函数的情况下,该模型可以正常工作:
FC_model = Model(inputs = vgg16_model.input, outputs = fc2);
有人可以向我解释这个问题以及如何解决的建议吗?
我找到了解决该问题的方法。对于遇到相同问题的任何人,您都可以使用Lambda层包装张量流操作,这就是我所做的:
from tensorflow.python.keras.layers import Lambda;
def norm(fc2):
fc2_norm = K.l2_normalize(fc2, axis = 3);
illum_est = tf.reduce_sum(fc2_norm, axis = (1, 2));
illum_est = K.l2_normalize(illum_est);
return illum_est;
illum_est = Lambda(norm)(fc2);
我训练了一个模型,输入了张量:输入形状:[150]输入类型: 在输出中,该张量为:输出形状:[1 50 17]输出类型: 如何在Java中创建这些?在Android设备上使用它?谢谢
/usr/local/lib/python3.6/dist-packages/tensorflow/python/training/checkpointable/base.py in_method_wrapper(self,*args,**kwargs)362 self._setattr_tracking=False#pylint:disable=protected-access 363 try:
我在Tensorflow中训练了一个模型,因此可以产生的最大产出值为1.0。然后我将其转换为Tensorflow Lite以安装在android上,现在Tensorflow Lite模型产生的值远大于1.0。我可以做些什么来解决这个问题? 我用的是Tensorflow 2.5 tf模型-
更新:在我的个人电脑和谷歌云上测试相同的代码,使用tenstorflow gpu 1.13.1工作。 使用TensorFlow估计器和运行train_and_evaluate给我以下错误消息: "ValueError: Tensor("Const: 0",form=(3,),dtype=Float32)必须来自与Tensor("ParallelMapDataset: 0",form=(),dtyp
>美国东部时间2014年11月12日06:53:47
我正在开发一个需要ML模型集成的Android应用程序。为此,我使用TensorFlow lite进行部署。我使用基于自定义模型的暹罗网络进行输出,输出形状为[1 128]。当我在Google Colab上推断python中的tf lite模型时,输出[1 128]数字与我在Android设备上产生的数字不同。输入图像在两种推断以及输入和输出形状上都是相同的,但我在Android手机和Python