【发布时间】:2022-01-10 09:17:42
【问题描述】:
我尝试训练 mnist 数据集,但出现如下错误:
No gradients provided for any variable: ['module_wrapper/conv2d/kernel:0',
'module_wrapper/conv2d/bias:0', 'module_wrapper_2/conv2d_1/kernel:0',
'module_wrapper_2/conv2d_1/bias:0', 'module_wrapper_5/dense/kernel:0',
'module_wrapper_5/dense/bias:0', 'module_wrapper_6/dense_1/kernel:0',
'module_wrapper_6/dense_1/bias:0'].
我的适合码:
self.model.fit(x = self.datas.trainImages, y = self.datas.trainLabels, batch_size = self.datas.batch_size, epochs =self.datas.epochs)
这里是变量:
self.datas.trainImages = numpy.stack([cv2.imread(image1)],[cv2.imread(image2), dtype = float64],[cv2.imread(image3)])
self.datas.trainLabels = numpy.stack([0,1,2], dtype = int32)
另外,如果我打印 model.summary(),它是 lenet 模型:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
module_wrapper (ModuleWrappe (None, 28, 28, 32) 320
_________________________________________________________________
module_wrapper_1 (ModuleWrap (None, 14, 14, 32) 0
_________________________________________________________________
module_wrapper_2 (ModuleWrap (None, 14, 14, 64) 18496
_________________________________________________________________
module_wrapper_3 (ModuleWrap (None, 7, 7, 64) 0
_________________________________________________________________
module_wrapper_4 (ModuleWrap (None, 3136) 0
_________________________________________________________________
module_wrapper_5 (ModuleWrap (None, 500) 1568500
_________________________________________________________________
module_wrapper_6 (ModuleWrap (None, 10) 5010
=================================================================
Total params: 1,592,326
Trainable params: 1,592,326
Non-trainable params: 0
_________________________________________________________________
没有名为 Conv2D 的层,但我添加了它们,
model.add(layers.Conv2D(filters=32,kernel_size=3,strides=1,activation='relu',padding='same'))
model.add(layers.MaxPool2D(pool_size=(2,2),strides=(2,2)))
model.add(layers.Conv2D(filters=64,kernel_size=3,strides=1,activation='relu',padding='same'))
model.add(layers.MaxPool2D(pool_size=(2,2),strides=(2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(500))
model.add(layers.Dense(self.datas.classCount,activation='softmax'))
当我研究这个问题时,google 和 stackoverflow 说在 fit 函数中添加标签,但我已经添加了它们。
更新 1
你可以试试这个代码来运行它:
import tensorflow
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential
import tensorflow.keras.losses
parameters = parameters
datas = datas
model = Sequential()
optimizer = tf.keras.optimizers.SGD()
loss = tensorflow.keras.losses.CategoricalCrossentropy(name = 'CategoricalCrossentropy', from_logits = True)
metrics = tensorflow.keras.metrics.CategoricalAccuracy(name = 'CategoricalAccuracy')
model.add(layers.Conv2D(filters=32,kernel_size=3,strides=1,activation='relu',padding='same'))
model.add(layers.MaxPool2D(pool_size=(2,2),strides=(2,2)))
model.add(layers.Conv2D(filters=64,kernel_size=3,strides=1,activation='relu',padding='same'))
model.add(layers.MaxPool2D(pool_size=(2,2),strides=(2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(500))
model.add(layers.Dense(self.datas.classCount,activation='softmax'))
trainImages = numpy.stack([[cv2.imread(image1)],[cv2.imread(image2)],[cv2.imread(image3)]], dtype = float64)
#All images is belong to mnist dataset. I read them from a folder and append to list, then convert the dataset list into numpy.stack
trainLabels = numpy.stack([0,1,2], dtype = int32)
model.compile(loss = loss, optimizer = optimizer, metrics = metrics)
model.fit(x = trainImages, y = trainLabels, batch_size = 2, epochs =1)
【问题讨论】:
-
您只训练 3 张图像?要计算梯度下降,训练数据集的大小必须大于批量大小。
-
@EricMarchand 实际上不是 3,我只是想让你想象一下数据集的格式。我的代码有很多步骤,我只是尽量简化。
-
请将导入添加到您的问题中。
-
@Dr.Snoopy 我试着让它变得更容易,你可以在更新 1 中看到它。
-
这些不是所有的导入,层没有在你的代码中定义。
标签: python tensorflow keras deep-learning