首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >model.predict抛出ValueError:预期的shape=(无,64,64,3),发现shape=(无,64,3)

model.predict抛出ValueError:预期的shape=(无,64,64,3),发现shape=(无,64,3)
EN

Stack Overflow用户
提问于 2022-09-04 09:18:07
回答 1查看 339关注 0票数 1

我在google笔记本中使用tensorflow建立了以下卷积神经网络(CNN)模型:

代码语言:javascript
复制
import tensorflow as tf

PATCHSIZE = 64

# CNN model
model = tf.keras.models.Sequential([
    # Convolutional layer. Learn 32 filters using a 3x3 kernel
    tf.keras.layers.Conv2D(32, (3, 3), activation="relu", input_shape=(PATCHSIZE, PATCHSIZE, 3)),

    #Max-pooling layer, using 2x2 pool size
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),

    # Flatten units
    tf.keras.layers.Flatten(),
    # Add a hidden layer with dropout
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Dropout(0.5),

    # Add an output layer with one output unit for a probability
    tf.keras.layers.Dense(1, activation="sigmoid")
])

model.compile(
    optimizer="adam",
    loss="binary_crossentropy",
    metrics=["accuracy"]
)

training_patches = []
training_labels = []

training_patches = np.array(training_patches)
training_labels = np.array(training_labels)

model.fit(training_patches, training_labels, epochs=20)

validation_patches = np.array(validation_patches)
validation_labels = np.array(validation_labels)

model.evaluate(validation_patches, validation_labels, verbose=2)

输入数据(补丁)是大小为64x64像素的彩色图像。因此输入形状是(64,64,3)。训练和推理过程运行良好,但当我试图预测输入修补程序(形状为(64、64、3)的numpy数组)的概率时,我得到了以下错误:

代码语言:javascript
复制
throws  ValueError: Input 0 of layer "sequential_6" is incompatible with the layer: expected shape=(None, 64, 64, 3), found shape=(None, 64, 3)
代码语言:javascript
复制
 # throws  ValueError: Input 0 of layer "sequential_6" is incompatible with the layer: expected shape=(None, 64, 64, 3), found shape=(None, 64, 3)
model.predict(patch)

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-04 09:25:55

问题是您没有指定批处理维度。试试下面的代码:

代码语言:javascript
复制
import tensorflow as tf
import numpy as np

PATCHSIZE = 64

# CNN model
model = tf.keras.models.Sequential([
    # Convolutional layer. Learn 32 filters using a 3x3 kernel
    tf.keras.layers.Conv2D(32, (3, 3), activation="relu", input_shape=(PATCHSIZE, PATCHSIZE, 3)),

    #Max-pooling layer, using 2x2 pool size
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),

    # Flatten units
    tf.keras.layers.Flatten(),
    # Add a hidden layer with dropout
    tf.keras.layers.Dense(128, activation="relu"),
    tf.keras.layers.Dropout(0.5),

    # Add an output layer with one output unit for a probability
    tf.keras.layers.Dense(1, activation="sigmoid")
])

model.compile(
    optimizer="adam",
    loss="binary_crossentropy",
    metrics=["accuracy"]
)

training_patches = np.ones((1, PATCHSIZE, PATCHSIZE, 3))
training_labels = np.ones((1, 1))

model.fit(training_patches, training_labels, epochs=20)

validation_patches = np.ones((1, PATCHSIZE, PATCHSIZE, 3))
validation_labels = np.ones((1, 1))

model.evaluate(validation_patches, validation_labels, verbose=2)

如果您有一个validation_patch,那么向已经存在的numpy数组添加维度的简单方法如下:

代码语言:javascript
复制
my_array = np.ones((64, 64, 3))
print(my_array.shape)  # output: (64, 64, 3)
my_array = np.expand_dims(my_array, axis=0)
print(my_array.shape)  # output: (1, 64, 64, 3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73598157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档