我在google笔记本中使用tensorflow建立了以下卷积神经网络(CNN)模型:
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数组)的概率时,我得到了以下错误:
throws ValueError: Input 0 of layer "sequential_6" is incompatible with the layer: expected shape=(None, 64, 64, 3), found shape=(None, 64, 3) # 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)我做错了什么?
发布于 2022-09-04 09:25:55
问题是您没有指定批处理维度。试试下面的代码:
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数组添加维度的简单方法如下:
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)https://stackoverflow.com/questions/73598157
复制相似问题