在Tensorflow/Keras模型中是否可以使用可变输入通道大小?

vu8f3i0k  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(124)

我想构建一个具有可变通道大小的单一Tensorflow模型。我的目标是让这个单一模型采用1、2或3个通道的输入数据。这可能吗?
我尝试了以下示例代码(Tensorflow版本2.1.0)。

from tensorflow import keras
from tensorflow.keras import layers

inputs = keras.Input(shape=(128, 128, None), name="inputs")
x = layers.Conv2D(32, 3, activation="relu", strides=2, padding="same")(inputs)
x = layers.Conv2D(64, 3, activation="relu", strides=2, padding="same")(x)
x = layers.Flatten()(x)
outputs = layers.Dense(26, activation="relu")(x)
test_model = keras.Model(inputs, outputs, name="test_model")
test_model.summary()

但是我得到了如下的错误输出。
值错误追溯(最近调用最后)in 1 inputs = keras.Input(形状=(128,128,无),名称=“输入”)----〉2 x =图层。Conv 2D(32,3,激活=“relu”,步幅=2,填充=“相同”)(输入)3 x =图层. Conv 2D(64,3,激活=“relu”,步幅=2,填充=“相同”)(x)4 x =图层.展平()(x)5输出=图层.密集(26,激活=“relu”)(x)
694 if all(hasattr(x,'get_shape')for x in input_list):在一个输入列表中,如果所有的元素都是空的,那么就可以使用这个属性。695输入_形状= nest.map_结构(λ x:x.get_shape(),inputs)--〉696 self.build(input_shape)697 698 #检查在层构建之后设置的输入假设,例如输入形状。
如果convolutional.py输入形状[通道轴]的值为“无”,则通道轴= -1 148:--〉149 raise ValueError('应该定义输入' 150 '的通道维度。找到None。')151 input_dim = int(input_shape[通道轴])
ValueError:应定义输入的通道维度。找到None
我认为一个变通的解决方案是使通道大小为最大可能的输入通道(我的情况是3个)。然后我可以使用适合输入数据的第一个所需数量的通道,用零填充其余通道。但我想知道tensorflow.keras模块是否直接支持可变通道。谢谢!

mrphzbgm

mrphzbgm1#

在指定输入形状的输入层上,shape=(128,128,None),作为元组中最后一个元素的颜色通道应该是整数,而不是None,因此将形状更改为(128,128,3)可以解决该问题。
查找以下解决方案

from tensorflow import keras
from tensorflow.keras import layers

inputs = keras.Input(shape=(128, 128, 3), name="inputs")
x = layers.Conv2D(32, 3, activation="relu", strides=2, padding="same")(inputs)
x = layers.Conv2D(64, 3, activation="relu", strides=2, padding="same")(x)
x = layers.Flatten()(x)
outputs = layers.Dense(26, activation="relu")(x)
test_model = keras.Model(inputs, outputs, name="test_model")
test_model.summary()

相关问题