Tla*_*-ES 2 python keras tensorflow
你好,我正在用 TensorFlow 和 Keras 训练一个模型,数据集是从https://www.microsoft.com/en-us/download/confirmation.aspx?id=54765下载的
这是我在以下目录中拆分的 zip 文件夹:
.
??? test
? ??? Cat
? ??? Dog
??? train
??? Cat
??? Dog
Run Code Online (Sandbox Code Playgroud)
test.cat和test.dog每个文件夹有1000张jpg照片,train.cat和traing.dog每个文件夹有11500张jpg照片。
负载是用这个代码做的:
batch_size = 16
# Data augmentation and preprocess
train_datagen = ImageDataGenerator(rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
validation_split=0.20) # set validation split
# Train dataset
train_generator = train_datagen.flow_from_directory(
'PetImages/train',
target_size=(244, 244),
batch_size=batch_size,
class_mode='binary',
subset='training') # set as training data
# Validation dataset
validation_generator = train_datagen.flow_from_directory(
'PetImages/train',
target_size=(244, 244),
batch_size=batch_size,
class_mode='binary',
subset='validation') # set as validation data
test_datagen = ImageDataGenerator(rescale=1./255)
# Test dataset
test_datagen = test_datagen.flow_from_directory(
'PetImages/test')
Run Code Online (Sandbox Code Playgroud)
该模型正在使用以下代码进行训练:
history = model.fit(train_generator,
validation_data=validation_generator,
epochs=5)
Run Code Online (Sandbox Code Playgroud)
我得到以下输入:
Epoch 1/5
1150/1150 [==============================] - ETA: 0s - loss: 0.0505 - accuracy: 0.9906
Run Code Online (Sandbox Code Playgroud)
但是当时代在这一点上时,我收到以下错误:
UnidentifiedImageError: 无法识别图像文件 <_io.BytesIO object at 0x7f9e185347d0>
为了完成培训,我该如何解决这个问题?
谢谢
I. *_*Ali 12
我不知道这是否仍然相关,但对于将来遇到同样问题的人来说:
在这种特定情况下,dog_cat 数据集中有两个损坏的文件:
只要删除它们就可以了。
试试这个功能来检查图像是否都是正确的格式。
import os
from PIL import Image
folder_path = 'data\img'
extensions = []
for fldr in os.listdir(folder_path):
sub_folder_path = os.path.join(folder_path, fldr)
for filee in os.listdir(sub_folder_path):
file_path = os.path.join(sub_folder_path, filee)
print('** Path: {} **'.format(file_path), end="\r", flush=True)
im = Image.open(file_path)
rgb_im = im.convert('RGB')
if filee.split('.')[1] not in extensions:
extensions.append(filee.split('.')[1])
Run Code Online (Sandbox Code Playgroud)
我以前遇到过这个问题。因此,我开发了一个 python 脚本来测试训练和测试目录中是否存在有效的图像文件。文件扩展名必须是 jpg、png、bmp 或 gif 之一,因此它首先检查正确的扩展名。然后它尝试使用 cv2 读取图像。如果未输入有效图像,则会创建异常。在每种情况下都会打印出错误的文件名。最后,名为 bad_list 的列表包含错误文件路径列表。注意目录必须名为“test”和“train”
import os
import cv2
bad_list=[]
dir=r'c:\'PetImages'
subdir_list=os.listdir(dir) # create a list of the sub directories in the directory ie train or test
for d in subdir_list: # iterate through the sub directories train and test
dpath=os.path.join (dir, d) # create path to sub directory
if d in ['test', 'train']:
class_list=os.listdir(dpath) # list of classes ie dog or cat
# print (class_list)
for klass in class_list: # iterate through the two classes
class_path=os.path.join(dpath, klass) # path to class directory
#print(class_path)
file_list=os.listdir(class_path) # create list of files in class directory
for f in file_list: # iterate through the files
fpath=os.path.join (class_path,f)
index=f.rfind('.') # find index of period infilename
ext=f[index+1:] # get the files extension
if ext not in ['jpg', 'png', 'bmp', 'gif']:
print(f'file {fpath} has an invalid extension {ext}')
bad_list.append(fpath)
else:
try:
img=cv2.imread(fpath)
size=img.shape
except:
print(f'file {fpath} is not a valid image file ')
bad_list.append(fpath)
print (bad_list)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5238 次 |
| 最近记录: |