imread - FileNotFoundError: No such file:
imread - FileNotFoundError: No such file:
我用序列 class 创建了一个 DataGenerator。
import tensorflow.keras as keras
from skimage.io import imread
from skimage.transform import resize
import numpy as np
import math
from tensorflow.keras.utils import Sequence
# Here, `x_set` is list of path to the images
# and `y_set` are the associated classes.
class DataGenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx * self.batch_size:(idx + 1) *
self.batch_size]
batch_y = self.y[idx * self.batch_size:(idx + 1) *
self.batch_size]
return np.array([
resize(imread(file_name), (224, 224))
for file_name in batch_x]), np.array(batch_y)
然后,我将其应用于我的训练和验证数据。 X_train
是一个字符串列表,其中包含训练数据的图像路径。 y_train
是训练数据的单一编码标签。验证数据也是如此。
我将 DataGenerator 应用于训练和验证数据:
training_generator = DataGenerator(X_train, y_train, batch_size=32)
validation_generator = DataGenerator(X_val, y_val, batch_size=32)
后来我用fit_generator
方法运行一个模型:
model.fit_generator(generator=training_generator,
validation_data=validation_generator,
steps_per_epoch = num_train_samples // 32,
validation_steps = num_val_samples // 32,
epochs = 10,
use_multiprocessing=True,
workers=2)
并出现以下错误:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-79-f43ade94ee10> in <module>()
5 epochs = 10,
6 use_multiprocessing=True,
----> 7 workers=2)
16 frames
/usr/local/lib/python3.6/dist-packages/imageio/core/request.py in _parse_uri(self, uri)
271 # Reading: check that the file exists (but is allowed a dir)
272 if not os.path.exists(fn):
--> 273 raise FileNotFoundError("No such file: '%s'" % fn)
274 else:
275 # Writing: check that the directory to write to does exist
FileNotFoundError: No such file: 'path/to/images/1_1.png'
在我看来,imread 方法没有找到该文件。我检查了图片路径,是正确的。
有谁知道我应该在程序中更改什么?
您使用的文件名包含 wildcards.
来自 opencv 的方法 imread 根本不支持它们。
您需要在不使用通配符的情况下提供文件名。
开始检查 x_set
变量(在实例化中这转换为 X_train
):打印出图像路径列表的一小部分,例如
print(f"{X_train[:2] = }")
,
然后开始检查这些图像路径之一是否存在,以及它是否与您从 Python 脚本指向的路径相同。
我用序列 class 创建了一个 DataGenerator。
import tensorflow.keras as keras
from skimage.io import imread
from skimage.transform import resize
import numpy as np
import math
from tensorflow.keras.utils import Sequence
# Here, `x_set` is list of path to the images
# and `y_set` are the associated classes.
class DataGenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return math.ceil(len(self.x) / self.batch_size)
def __getitem__(self, idx):
batch_x = self.x[idx * self.batch_size:(idx + 1) *
self.batch_size]
batch_y = self.y[idx * self.batch_size:(idx + 1) *
self.batch_size]
return np.array([
resize(imread(file_name), (224, 224))
for file_name in batch_x]), np.array(batch_y)
然后,我将其应用于我的训练和验证数据。 X_train
是一个字符串列表,其中包含训练数据的图像路径。 y_train
是训练数据的单一编码标签。验证数据也是如此。
我将 DataGenerator 应用于训练和验证数据:
training_generator = DataGenerator(X_train, y_train, batch_size=32)
validation_generator = DataGenerator(X_val, y_val, batch_size=32)
后来我用fit_generator
方法运行一个模型:
model.fit_generator(generator=training_generator,
validation_data=validation_generator,
steps_per_epoch = num_train_samples // 32,
validation_steps = num_val_samples // 32,
epochs = 10,
use_multiprocessing=True,
workers=2)
并出现以下错误:
---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-79-f43ade94ee10> in <module>()
5 epochs = 10,
6 use_multiprocessing=True,
----> 7 workers=2)
16 frames
/usr/local/lib/python3.6/dist-packages/imageio/core/request.py in _parse_uri(self, uri)
271 # Reading: check that the file exists (but is allowed a dir)
272 if not os.path.exists(fn):
--> 273 raise FileNotFoundError("No such file: '%s'" % fn)
274 else:
275 # Writing: check that the directory to write to does exist
FileNotFoundError: No such file: 'path/to/images/1_1.png'
在我看来,imread 方法没有找到该文件。我检查了图片路径,是正确的。
有谁知道我应该在程序中更改什么?
您使用的文件名包含 wildcards.
来自 opencv 的方法 imread 根本不支持它们。
您需要在不使用通配符的情况下提供文件名。
开始检查 x_set
变量(在实例化中这转换为 X_train
):打印出图像路径列表的一小部分,例如
print(f"{X_train[:2] = }")
,
然后开始检查这些图像路径之一是否存在,以及它是否与您从 Python 脚本指向的路径相同。