在使用 sklearn 和 keras 构建 CNN 时需要帮助理解形状错误吗?
Posted
技术标签:
【中文标题】在使用 sklearn 和 keras 构建 CNN 时需要帮助理解形状错误吗?【英文标题】:Need help in understanding shape error while Building a CNN with sklearn and keras? 【发布时间】:2021-10-12 22:20:27 【问题描述】:我尝试加载我的数据集并设计一个 CNN,但是当我尝试训练我的模型时出现了这个错误,我想知道如何解决这个问题?
ValueError: The channel dimension of the inputs should be defined. Found None.
这就是我拆分数据的方式
xtrain, xtest, ytrain, ytest = trian_test_split(images_total,
image_labels,
stratify=image_labels,
random_state=1234,
test_size=0.2)
xvalid, xtest, yvalid, ytest= trian_test_split(xtest,
ytest,
stratify=ytest,
random_state=1234,
test_size=0.5)
def read_img(path, label):
file = tf.io.read_file(path)
img = tf.image.decode_png(file)
img = tf.image.resize(img, (32, 32))
return img, label
train_dataset = tf.data.Dataset.from_tensor_slices((xtrain, ytrain))
train_dataset = train_dataset.map(read_img).batch(batch_size)
valid_dataset = tf.data.Dataset.from_tensor_slices((xvalid, yvalid))
valid_dataset = valid_dataset.map(read_img).batch(batch_size)
test_dataset = tf.data.Dataset.from_tensor_slices((xtest, ytest))
test_dataset = test_dataset.map(read_img).batch(batch_size)
这是我的模型
num_classes = 26
model = tf.keras.Sequential([
tf.keras.layers.experimental.preprocessing.Resizing(32, 32),
tf.keras.layers.experimental.preprocessing.Rescaling(1./255),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
tf.keras.layers.Conv2D(32, 3, activation='relu'),
tf.keras.layers.MaxPooling2D(),
layers.Dropout(0.2),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dense(num_classes)
])
model.compile(
optimizer='adam',
loss=tf.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(train_dataset, epochs=5, validation_data=valid_dataset)
当我尝试拟合此模型时出现错误,我无法修复此问题
【问题讨论】:
你在调用 model.fit 时是否也传递了 y 标签? @Nagakiran 不,我该怎么做?抱歉,我对此很陌生 【参考方案1】:您在调用时没有将 y 标签传递给模型,模型需要 x 和 y 标签进行相应的训练, Here i added an example
请稍等片刻,浏览keras io 中有关 keras 架构和文档的视频,这些视频将提供有关深度学习建模的更多信息
熟悉了所有之后,跳到建模
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=3)
【讨论】:
谢谢你的帮助,我在解决这个问题后浏览了这些视频,因为这对我来说非常重要,我使用这种方法并且有一个错误说'ValueError:'images'必须有3 或 4 个维度。当我不能用'xtrain.reshape'重塑它时,因为xtrain是一个列表@Nagakiran 哈哈,你的模型实际上是 3 维的,你能分享 xtrain 和 ytrain 的形状吗@khashayarehteshami xtrain 和 ytrain 形状都是 '(16640,)',它们都是列表 那是未经批准的行为,您需要跟踪训练数据的生成,似乎您需要在新轴上堆叠,请回溯以获得 3 维,因为这些是图像,它们应该遵循 3d 形状:- | @khashayarehteshami 谢谢,我会找出发生了什么以及为什么它会出现在列表中以上是关于在使用 sklearn 和 keras 构建 CNN 时需要帮助理解形状错误吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 sklearn 管道缩放 Keras 自动编码器模型的目标值?
使用 Keras 和 sklearn GridSearchCV 交叉验证提前停止
在带有 sklearn/Keras 的神经网络上使用 skopt 进行超参数优化