- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我使用 Keras 和 TensorFlow 作为后端来创建和训练一个简单的 CNN。我能够将模型及其权重保存在 .pb 文件中,卡住它并优化它以进行推理,但是当我尝试将它加载到 OpenCV 3.4.1 中时,出现错误:
flatten/Shape:Shape(max_pooling2d/MaxPool)
T:0
out_type:[ ]
OpenCV(3.4.1) Error: Unspecified error (Unknown layer type Shape in op flatten/Shape) in populateNet, file /home/dev/opencv-3.4.1/modules/dnn/src/tensorflow/tf_importer.cpp, line 1582
Traceback (most recent call last):
File "test.py", line 67, in <module>
net = cv.dnn.readNetFromTensorflow('graph.pb')
cv2.error: OpenCV(3.4.1) /home/dev/opencv-3.4.1/modules/dnn/src/tensorflow/tf_importer.cpp:1582: error: (-2) Unknown layer type Shape in op flatten/Shape in function populateNet
这基本上与另一个问题相同:How to import TensorFlow model with flatten layer in OpenCV? .
此线程中很好地解释了错误的原因。建议的解决方法是直接使用 tf.reshape
而不是使用 Keras API。
但是我不知 Prop 体怎么做。我尝试使用功能性 API 并替换:
x = Flatten()(x)
通过:
x = tf.reshape(x, [-1, some_value])
但这不起作用,我收到以下错误:
Traceback (most recent call last):
File "test.py", line 57, in <module>
tf_out = model.predict(inp)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/_impl/keras/models.py", line 965, in predict
self.build()
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/_impl/keras/models.py", line 578, in build
self.model = Model(self.inputs, self.outputs[0], name=self.name + '_model')
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/keras/_impl/keras/engine/topology.py", line 678, in __init__
super(Network, self).__init__(inputs, outputs, name=name)
File "/usr/local/lib/python3.5/dist-packages/tensorflow/python/layers/network.py", line 341, in __init__
'(thus holding past layer metadata). Found: ' + str(x))
ValueError: Output tensors to a Model must be the output of a TensorFlow `Layer` (thus holding past layer metadata). Found: Tensor("activation_4/Softmax:0", shape=(?, 10), dtype=float32)
知道如何在仍然使用 Keras 完成大部分工作的同时导出 TensorFlow 模型吗?
最佳答案
我遇到了同样的问题。经过大量搜索和测试许多解决方案后,终于,我可以在 opencv 中导入 keras 分类训练模型。首先,您必须用 tensorflow.python.keras 替换 keras。只需从您的代码行中删除 keras 并将其替换为 tensorflow.python.keras其次,您必须用以下代码替换 flatten layares:只需删除展平层并复制并通过此:
a,b,c,d = model.output_shape
a = b*c*d
model.add(K.layers.Permute([1, 2, 3])) # Indicate NHWC data layout
model.add(K.layers.Reshape((a,)))
现在您可以重新训练您的模型。训练完成后,将模型保存为 .h5 格式。现在您必须将 keras .h5 模型转换为 tensorflow .pb 模型。为了转换模型,我使用了这个解决方法: https://stackoverflow.com/a/53386325/5208522现在您可以轻松地在 opencv 中导入 .pb 模型,它可以完美运行。
关于python - 在 OpenCV 3 中使用带有 Flatten 层的 Keras 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49794023/
torch.flatten() 和 torch.nn.Flatten() 有什么区别? 最佳答案 扁平化在 PyTorch 中以三种形式提供 作为张量方法(oop 风格) torch.Tensor.f
我有以下(不完整的)功能: /* Populates char* name with the named location of the ith (flat) element * of an arr
我正在尝试使用 Keras 和基于 Marcin 的 PS3 示例的 Tensorflow 后端构建一个可变长度序列分类模型:https://stackoverflow.com/a/42635571/
我开始使用 keras 和 tensorflow 进行深度学习。在最初阶段,我有一个疑问。当我使用 tf.contrib.layers.flatten (Api 1.8) 用于拼合图像(也可以是多 c
鉴于以下SVG: 是否有任何工具可以通过变换自动更新路径点,并从组元素中删除变换? 我有一个SVG应用程序(草图),它使用转换属性(如果您
我目前有一个 Python 脚本,它使用 flatten 函数来展平 JSON 对象,然后我将使用 json_normalize将扁平的 JSON 转换为 DataFrame。 import pand
我注意到Option.flatten是defined,如下所示: def flatten [B](隐式ev:A To) with Serializable ... implicit def conf
我希望有人经历过相同的过程并可以帮助我看看以下情况是否可能。 我目前构建了一个从 S3 存储桶进行复制的管道。该存储桶包含大量文件夹。 Azure 数据工厂是否有办法在从 S3 存储桶复制数据时忽略文
我希望有人经历过相同的过程并可以帮助我看看以下情况是否可能。 我目前构建了一个从 S3 存储桶进行复制的管道。该存储桶包含大量文件夹。 Azure 数据工厂是否有办法在从 S3 存储桶复制数据时忽略文
这个问题在这里已经有了答案: How to flatten tree via LINQ? (15 个答案) 关闭 6 年前。 我有一个嵌套类: class Item {
我有下表: group_id amount type 1 10 1 1 2 1 1 5 2 1
我有兴趣实现一个通用的 flatten一个容器的容器 为了简化,我会使用自己的容器。主要原因是标准容器接收分配器的附加模板参数,这对我编写操作来说更复杂。因此,考虑容器 Vector , List等让
给定如下列表(我的实际列表比这个长,列表中至少有100个子列表): [[135, "Apple Banana"], [136, "Peach Watermelon"], [137, "Orange S
这个问题在这里已经有了答案: Flatten an irregular (arbitrarily nested) list of lists (51 个答案) 关闭 5 年前。 我有一个不规则的数据
我创建了一个函数,它接受输入变量的向量,并为每组输入返回一个元胞数组。最终输出变量 (out) 似乎由一个包含两个 1x5 单元格的 2x1 单元格组成。我在下面提供了截图: 我只是想弄清楚如何将元胞
我正在尝试编写一个方法,它将接受一个由字符 0、1 和 ? 组成的字符串,并返回由原始字符串表示的一组字符串,将 ? 作为通配符,可以是 0 或 1。例如,如果输入是 "011?0",则输出应该是 [
假设我有一堆从 Pig UDF 生成的数据包,其中包含多个字符串元组。我怎样才能将它们全部从数据包中拉出来并简单地使每个字符串成为它自己的数据“行”。 databags = FOREACH 数据生成
所以我的目标是: fruitColourMapping = [{'apple': 'red'}, {'banana': 'yellow'}] 到 finalMap = {'apple': 'red',
我需要使用 Serialize 和 Deserialize 的自定义实现,但我不知道如何做 #[serde(flatten)] 有没有人知道? 注意:我知道我可以将较低元素的完整实现完全重写到较高元素
我有一个 FLATTEN LAMBDA 函数,可以将数组中的数据展平。这很好用,但我想集成另一个数组参数,这样我就可以使用不连续的范围。 在我的示例中,A1:B6 范围位于 array 中并返回展平数
我是一名优秀的程序员,十分优秀!