使用ImageDataGenerator时出错-Tensorflow

问题描述

我正在学习TensorFlow,并尝试使用ImageDataGenerator将Kaggle上的上载MNIST数据集加载到我的模型中。 下面是我编写的代码。

import tensorflow as tf
image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255)
train_generator = image_generator.flow_from_directory(
                                            '/kaggle/input/mnist-images/MNIST_images/trainingSet/',target_size=(28,28),batch_size=128,class_mode='categorical'
                                        )
model = tf.keras.Sequential([
    tf.keras.layers.Conv2D(16,(3,3),activation='relu',input_shape=(28,28,1)),tf.keras.layers.MaxPool2D(2,2),tf.keras.layers.Conv2D(32,activation='relu'),tf.keras.layers.Conv2D(64,tf.keras.layers.Flatten(),tf.keras.layers.Dense(128,activation = tf.nn.relu),tf.keras.layers.Dense(10,activation=tf.nn.softmax)

])
model.compile(optimizer='adam',loss=tf.losses.CategoricalCrossentropy(),metrics=['accuracy'])
model.fit(train_generator,epochs=2,verbose=2)

ImageDataGenerator可以正确加载训练数据,还可以打印找到的正确训练示例。但是当我执行模型时,出现以下错误

---------------------------------------------------------------------------
NotFoundError                             Traceback (most recent call last)
<ipython-input-5-f34d8da40c16> in <module>
----> 1 model.fit(train_generator,verbose=2)

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self,*args,**kwargs)
     64   def _method_wrapper(self,**kwargs):
     65     if not self._in_multi_worker_mode():  # pylint: disable=protected-access
---> 66       return method(self,**kwargs)
     67 
     68     # Running inside `run_distribute_coordinator` already.

/opt/conda/lib/python3.7/site-packages/tensorflow/python/keras/engine/training.py in fit(self,x,y,batch_size,epochs,verbose,callbacks,validation_split,validation_data,shuffle,class_weight,sample_weight,initial_epoch,steps_per_epoch,validation_steps,validation_batch_size,validation_freq,max_queue_size,workers,use_multiprocessing)
    846                 batch_size=batch_size):
    847               callbacks.on_train_batch_begin(step)
--> 848               tmp_logs = train_function(iterator)
    849               # Catch OutOfRangeError for Datasets of unknown size.
    850               # This blocks until the batch has finished executing.

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in __call__(self,**kwds)
    578         xla_context.Exit()
    579     else:
--> 580       result = self._call(*args,**kwds)
    581 
    582     if tracing_count == self._get_tracing_count():

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/def_function.py in _call(self,**kwds)
    642         # Lifting succeeded,so variables are initialized and we can run the
    643         # stateless function.
--> 644         return self._stateless_fn(*args,**kwds)
    645     else:
    646       canon_args,canon_kwds = \

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/function.py in __call__(self,**kwargs)
   2418     with self._lock:
   2419       graph_function,args,kwargs = self._maybe_define_function(args,kwargs)
-> 2420     return graph_function._filtered_call(args,kwargs)  # pylint: disable=protected-access
   2421 
   2422   @property

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _filtered_call(self,kwargs)
   1663          if isinstance(t,(ops.Tensor,1664                            resource_variable_ops.BaseResourceVariable))),-> 1665         self.captured_inputs)
   1666 
   1667   def _call_flat(self,captured_inputs,cancellation_manager=None):

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/function.py in _call_flat(self,cancellation_manager)
   1744       # No tape is watching; skip to running the function.
   1745       return self._build_call_outputs(self._inference_function.call(
-> 1746           ctx,cancellation_manager=cancellation_manager))
   1747     forward_backward = self._select_forward_and_backward_functions(
   1748         args,/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/function.py in call(self,ctx,cancellation_manager)
    596               inputs=args,597               attrs=attrs,--> 598               ctx=ctx)
    599         else:
    600           outputs = execute.execute_with_cancellation(

/opt/conda/lib/python3.7/site-packages/tensorflow/python/eager/execute.py in quick_execute(op_name,num_outputs,inputs,attrs,name)
     58     ctx.ensure_initialized()
     59     tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle,device_name,op_name,---> 60                                         inputs,num_outputs)
     61   except core._NotOkStatusException as e:
     62     if name is not None:

NotFoundError:  No algorithm worked!
     [[node sequential/conv2d/Conv2D (defined at <ipython-input-5-f34d8da40c16>:1) ]] [Op:__inference_train_function_877]

Function call stack:
train_function

在这个练习示例中,我并不担心模型的体系结构或性能,而只是对了解ImageDataGenerator的工作感兴趣

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)