创建接受张量图像作为模型输入的 Tensorflow 模型
create Tensorflow model which accepts tensor image as input to the model
我正在为图像分类模型使用以下配置:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(100, 100, 3)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
如果我打印 model.inputs 那么它 returns
[<tf.Tensor 'flatten_input:0' shape=(None, 100, 100, 3) dtype=float32>]
如果我将张量图像传递给此模型,则它不起作用。所以我的问题是我应该对我的模型做些什么改变才能接受张量图像
我正在使用以下代码传递图像:
image = np.asarray(image)
# The input needs to be a tensor, convert it using `tf.convert_to_tensor`.
input_tensor = tf.convert_to_tensor(image)
# The model expects a batch of images, so add an axis with `tf.newaxis`.
input_tensor = input_tensor[tf.newaxis,...]
# Run inference
output_dict = model(input_tensor)
如果我通过张量图像,我会得到下面的错误
WARNING:tensorflow:Model was constructed with shape (None, 100, 100, 3) for input Tensor("flatten_input:0", shape=(None, 100, 100, 3), dtype=float32), but it was called on an input with incompatible shape (1, 886, 685, 3).
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
我只是想知道应该将哪些 Keras 层和输入参数更新到模型,以便它可以接受张量图像作为输入。
任何帮助,将不胜感激。谢谢!
定义你的模型,你需要告诉keras你的图片通道数:1个黑白图片,3个RGB...
所以你需要写:
keras.layers.Flatten(input_shape=(1, 100, 100, 3)) for a 1 channel picture
我还注意到您没有为最后一层定义激活函数:
keras.layers.Dense(10)
,如果您将损失定义为交叉熵,您需要获得一些概率作为网络的输出,例如 keras.layers.Dense(10, activation='softmax')
希望你清楚
该消息是警告,不是错误,只是一些语义。该警告确实指出了一个真正的问题。
您的模型拍摄形状为 (100, 100, 3)
的图像,并且您为其提供形状为 (886, 865, 3)
的输入。空间尺寸不匹配,您需要将图像调整为大小 100 x 100
.
我正在为图像分类模型使用以下配置:
model = keras.Sequential([
keras.layers.Flatten(input_shape=(100, 100, 3)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10)
])
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
如果我打印 model.inputs 那么它 returns
[<tf.Tensor 'flatten_input:0' shape=(None, 100, 100, 3) dtype=float32>]
如果我将张量图像传递给此模型,则它不起作用。所以我的问题是我应该对我的模型做些什么改变才能接受张量图像
我正在使用以下代码传递图像:
image = np.asarray(image)
# The input needs to be a tensor, convert it using `tf.convert_to_tensor`.
input_tensor = tf.convert_to_tensor(image)
# The model expects a batch of images, so add an axis with `tf.newaxis`.
input_tensor = input_tensor[tf.newaxis,...]
# Run inference
output_dict = model(input_tensor)
如果我通过张量图像,我会得到下面的错误
WARNING:tensorflow:Model was constructed with shape (None, 100, 100, 3) for input Tensor("flatten_input:0", shape=(None, 100, 100, 3), dtype=float32), but it was called on an input with incompatible shape (1, 886, 685, 3).
---------------------------------------------------------------------------
InvalidArgumentError Traceback (most recent call last)
我只是想知道应该将哪些 Keras 层和输入参数更新到模型,以便它可以接受张量图像作为输入。 任何帮助,将不胜感激。谢谢!
定义你的模型,你需要告诉keras你的图片通道数:1个黑白图片,3个RGB...
所以你需要写:
keras.layers.Flatten(input_shape=(1, 100, 100, 3)) for a 1 channel picture
我还注意到您没有为最后一层定义激活函数:
keras.layers.Dense(10)
,如果您将损失定义为交叉熵,您需要获得一些概率作为网络的输出,例如 keras.layers.Dense(10, activation='softmax')
希望你清楚
该消息是警告,不是错误,只是一些语义。该警告确实指出了一个真正的问题。
您的模型拍摄形状为 (100, 100, 3)
的图像,并且您为其提供形状为 (886, 865, 3)
的输入。空间尺寸不匹配,您需要将图像调整为大小 100 x 100
.