问题描述
我正在尝试使用 EfficientNet 进行迁移学习并出现此错误 任何答案请提供详细信息如何解决。 错误是当我尝试训练模型时。由于某种原因,它有时无法读取图像。
import pickle
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pylab import rcParams
import tensorflow as tf
import keras
from keras import layers,optimizers
get_ipython().run_line_magic('matplotlib','inline')
from keras.models import Sequential,load_model
from keras.layers import Conv2D,MaxPool2D,Dropout,Flatten,Dense
from keras.layers.normalization import Batchnormalization
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import Callback,EarlyStopping,ModelCheckpoint
from sklearn.metrics import confusion_matrix,classification_report
from skimage.transform import resize
import seaborn as sns
import cv2
import os
import glob
import shutil
batch_size = 48
width = 150
height = 150
epochs = 20
NUM_TRAIN = 2000
NUM_TEST = 1000
dropout_rate = 0.2
input_shape = (height,width,3)
from efficientnet.keras import EfficientNetB0 as Net
from efficientnet.keras import center_crop_and_resize,preprocess_input
conv_base = Net(weights='imagenet',include_top=False,input_shape=input_shape)
from tensorflow.keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(
rescale=1./255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')
# Note that the validation data should not be augmented!
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
# This is the target directory
train_dir,# All images will be resized to target height and width.
target_size=(height,width),batch_size=batch_size,# Since we use categorical_crossentropy loss,we need categorical labels
class_mode='categorical')
validation_generator = test_datagen.flow_from_directory(
validation_dir,target_size=(height,class_mode='categorical')
model = Sequential()
model.add(conv_base)
model.add(layers.GlobalMaxPooling2D(name="gap"))
# model.add(layers.Flatten(name="flatten"))
if dropout_rate > 0:
model.add(layers.Dropout(dropout_rate,name="dropout_out"))
# model.add(layers.Dense(256,activation='relu',name="fc1"))
model.add(layers.Dense(2,activation='softmax',name="fc_out"))
model.compile(loss='categorical_crossentropy',optimizer=optimizers.RMSprop(lr=2e-5),metrics=['acc'])
history = model.fit_generator(
train_generator,steps_per_epoch= NUM_TRAIN //batch_size,epochs=epochs,validation_data=validation_generator,validation_steps= NUM_TEST //batch_size,verbose=1,use_multiprocessing=True,workers=4)
我遇到了这个错误,我知道它与枕头和阅读图像或张量流有关:
Epoch 1/20
WARNING:tensorflow:multiprocessing can interact badly with TensorFlow,causing nondeterministic deadlocks. For high performance data pipelines tf.data is recommended.
11/41 [=======>......................] - ETA: 15s - loss: 1.9679 - acc: 0.5833
---------------------------------------------------------------------------
UnkNownError Traceback (most recent call last)
<ipython-input-21-bbda3a575f01> in <module>
2 optimizer=optimizers.RMSprop(lr=2e-5),3 metrics=['acc'])
----> 4 history = model.fit_generator(
5 train_generator,6 steps_per_epoch= NUM_TRAIN //batch_size,/usr/local/lib/python3.8/dist-packages/tensorflow/python/util/deprecation.py in new_func(*args,**kwargs)
322 'in a future version' if date is None else ('after %s' % date),323 instructions)
--> 324 return func(*args,**kwargs)
325 return tf_decorator.make_decorator(
326 func,new_func,'deprecated',/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/training.py in fit_generator(self,generator,steps_per_epoch,epochs,verbose,callbacks,validation_data,validation_steps,validation_freq,class_weight,max_queue_size,workers,use_multiprocessing,shuffle,initial_epoch)
1813 """
1814 _keras_api_gauge.get_cell('fit_generator').set(True)
-> 1815 return self.fit(
1816 generator,1817 steps_per_epoch=steps_per_epoch,/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/training.py in _method_wrapper(self,*args,**kwargs)
106 def _method_wrapper(self,**kwargs):
107 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
--> 108 return method(self,**kwargs)
109
110 # Running inside `run_distribute_coordinator` already.
/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/training.py in fit(self,x,y,batch_size,validation_split,sample_weight,initial_epoch,validation_batch_size,use_multiprocessing)
1096 batch_size=batch_size):
1097 callbacks.on_train_batch_begin(step)
-> 1098 tmp_logs = train_function(iterator)
1099 if data_handler.should_sync:
1100 context.async_wait()
/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/def_function.py in __call__(self,**kwds)
778 else:
779 compiler = "nonXla"
--> 780 result = self._call(*args,**kwds)
781
782 new_tracing_count = self._get_tracing_count()
/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/def_function.py in _call(self,**kwds)
805 # In this case we have created variables on the first call,so we run the
806 # defunned version which is guaranteed to never create variables.
--> 807 return self._stateless_fn(*args,**kwds) # pylint: disable=not-callable
808 elif self._stateful_fn is not None:
809 # Release the lock early so that multiple threads can perform the call
/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py in __call__(self,**kwargs)
2827 with self._lock:
2828 graph_function,args,kwargs = self._maybe_define_function(args,kwargs)
-> 2829 return graph_function._filtered_call(args,kwargs) # pylint: disable=protected-access
2830
2831 @property
/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py in _filtered_call(self,kwargs,cancellation_manager)
1841 `args` and `kwargs`.
1842 """
-> 1843 return self._call_flat(
1844 [t for t in nest.flatten((args,kwargs),expand_composites=True)
1845 if isinstance(t,(ops.Tensor,/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py in _call_flat(self,captured_inputs,cancellation_manager)
1921 and executing_eagerly):
1922 # No tape is watching; skip to running the function.
-> 1923 return self._build_call_outputs(self._inference_function.call(
1924 ctx,cancellation_manager=cancellation_manager))
1925 forward_backward = self._select_forward_and_backward_functions(
/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/function.py in call(self,ctx,cancellation_manager)
543 with _InterpolateFunctionError(self):
544 if cancellation_manager is None:
--> 545 outputs = execute.execute(
546 str(self.signature.name),547 num_outputs=self._num_outputs,/usr/local/lib/python3.8/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name,num_outputs,inputs,attrs,name)
57 try:
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:
UnkNownError: OSError: cannot identify image file <_io.BytesIO object at 0x7fc87d222b30>
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
File "/usr/lib/python3.8/multiprocessing/pool.py",line 125,in worker
result = (True,func(*args,**kwds))
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/utils/data_utils.py",line 679,in get_index
return _SHARED_SEQUENCES[uid][i]
File "/home/zion/.local/lib/python3.8/site-packages/keras_preprocessing/image/iterator.py",line 65,in __getitem__
return self._get_batches_of_transformed_samples(index_array)
File "/home/zion/.local/lib/python3.8/site-packages/keras_preprocessing/image/iterator.py",line 227,in _get_batches_of_transformed_samples
img = load_img(filepaths[j],File "/home/zion/.local/lib/python3.8/site-packages/keras_preprocessing/image/utils.py",line 114,in load_img
img = pil_image.open(io.BytesIO(f.read()))
File "/usr/local/lib/python3.8/dist-packages/PIL/Image.py",line 2818,in open
raise IOError("cannot identify image file %r" % (filename if filename else fp))
OSError: cannot identify image file <_io.BytesIO object at 0x7fc87d222b30>
"""
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/ops/script_ops.py",line 244,in __call__
ret = func(*args)
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/autograph/impl/api.py",line 302,in wrapper
return func(*args,**kwargs)
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/data/ops/dataset_ops.py",line 827,in generator_py_func
values = next(generator_state.get_iterator(iterator_id))
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/engine/data_adapter.py",line 814,in wrapped_generator
for data in generator_fn():
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/utils/data_utils.py",line 900,in get
six.reraise(*sys.exc_info())
File "/home/zion/.local/lib/python3.8/site-packages/six.py",line 703,in reraise
raise value
File "/usr/local/lib/python3.8/dist-packages/tensorflow/python/keras/utils/data_utils.py",line 891,in get
inputs = self.queue.get(block=True,timeout=5).get()
File "/usr/lib/python3.8/multiprocessing/pool.py",line 771,in get
raise self._value
OSError: cannot identify image file <_io.BytesIO object at 0x7fc87d222b30>
[[{{node PyFunc}}]]
[[IteratorGetNext]] [Op:__inference_train_function_30570]
Function call stack:
train_function
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)