我正在使用Keras、SGD和Softmax激活构建一个图像分类模型。训练数据集由RGB图像组成,尺寸为512x384。
为此,我遵循了Keras“Getting Started”指南,然而,当我试图训练模型时,我得到了标题中提到的错误,这是我到目前为止的代码:
import numpy as np
import tensorflow as tf
from tensorflow import keras
FOLDER_PATH = 'dataset'
dataset = keras.utils.image_dataset_from_directory(
FOLDER_PATH,
batch_size=64,
image_size=(512, 384)
)
# None x None x 3 -> Arbitrarily sized images with 3 channels
inputs = keras.Input(shape=(None, None, 3))
x = CenterCrop(height=150, width=150)(inputs)
x = Rescaling(scale= 1.0 / 255)(x)
outputs = layers.Dense(6, activation="softmax")(x)
model = keras.Model(inputs=inputs, outputs=outputs)
model.compile(
optimizer=keras.optimizers.SGD(learning_rate=0.01),
loss=keras.losses.CategoricalCrossentropy()
)
model.fit(dataset, epochs=3)
以下是该模型的总结:
Model: "model_6"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_8 (InputLayer) [(None, None, None, 3)] 0
center_crop_7 (CenterCrop) (None, 150, 150, 3) 0
rescaling_7 (Rescaling) (None, 150, 150, 3) 0
dense_7 (Dense) (None, 150, 150, 6) 24
=================================================================
Total params: 24
Trainable params: 24
Non-trainable params: 0
_________________________________________________________________
我还检查了数据的形状:
for data, labels in dataset:
print(data.shape) # (64, 512, 384, 3)
print(data.dtype) # <dtype: 'float32'>
print(labels.shape) # (64,)
print(labels.dtype) # <dtype: 'int32'>
那么,我该如何解决这个问题呢?我想知道我是否在数据预处理管道中犯了一些错误,或者我正在使用的数据是否与SGD优化器不兼容。
1条答案
按热度按时间ovfsdjhp1#
你需要改变一些事情。
首先,softmax要求您使用one-hot编码标签。您可以使用以下代码行转换您的数据:
在这一步之后你也需要到flatten你的输入在你feedit到你的模型之前.这是由做:
别忘了改变你的体型: