创建Tensorflow模型,该模型接受张量图像作为模型的输入

时间:2020-04-27 13:06:52

标签: python tensorflow keras tensorflow2.0 keras-layer

我将以下配置用于图像分类模型:

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'])

如果我使用print model.inputs,则返回

[<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层和输入参数,以便它可以接受张量图像作为输入。 任何帮助,将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

该消息是警告,不是错误,只是一些语义。该警告确实指出了实际问题。

您的模型将拍摄形状为(100, 100, 3)的图像,并且您将为其输入形状为(886, 865, 3)的图像。空间尺寸不匹配,您需要将图像尺寸调整为100 x 100

答案 1 :(得分:0)

定义模型时,您需要告诉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')

希望您很清楚