win10
python3.7
tensorflow-gpu2.6.0
keras2.6.0
出现
ValueError: Asked to retrieve element 0, but the Sequence has length 0
原因:老师给的代码中标红的文件夹下没有所需文件或缺失
解决办法:
将image文件夹下的test下的cat和dog文件夹分别复制到dc下的test和train
最终效果:
运行截图:
代码:
#-*- codeing = utf-8 -*- #@Time : 2022/10/2 11:44 #@Author : 程浩 #@File : 猫狗识别.py #@Software: PyCharm import tensorflow as tf import keras from keras import layers import numpy as np import os import shutil from tensorflow.keras.applications import VGG16 from tensorflow.keras.optimizers import Adam #%% base_dir = './dc' train_dir = base_dir + '/train' train_dog_dir = train_dir + '/dog' train_cat_dir = train_dir + '/cat' test_dir = base_dir + '/test' test_dog_dir = test_dir + '/dog' test_cat_dir = test_dir + '/cat' dc_dir = './dc/train' #%% if not os.path.exists(base_dir): os.mkdir(base_dir) os.mkdir(train_dir) os.mkdir(train_dog_dir) os.mkdir(train_cat_dir) os.mkdir(test_dir) os.mkdir(test_dog_dir) os.mkdir(test_cat_dir) fnames = ['cat.{}.jpg'.format(i) for i in range(1000,2000)] for fname in fnames: src = os.path.join(dc_dir, fname) dst = os.path.join(train_cat_dir, fname) shutil.copyfile(src, dst) # fnames = ['cat.{}.jpg'.format(i) for i in range(1000, 1500)] for fname in fnames: src = os.path.join(dc_dir, fname) dst = os.path.join(test_cat_dir, fname) shutil.copyfile(src, dst) fnames = ['dog.{}.jpg'.format(i) for i in range(1000)] for fname in fnames: src = os.path.join(dc_dir, fname) dst = os.path.join(train_dog_dir, fname) shutil.copyfile(src, dst) fnames = ['dog.{}.jpg'.format(i) for i in range(1000, 1500)] for fname in fnames: src = os.path.join(dc_dir, fname) dst = os.path.join(test_dog_dir, fname) shutil.copyfile(src, dst) #%% from keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale=1./255) test_datagen = ImageDataGenerator(rescale=1./255) #%% train_generator = train_datagen.flow_from_directory( train_dir, target_size=(200, 200), batch_size=20, class_mode='binary' ) test_generator = test_datagen.flow_from_directory( test_dir, target_size=(200, 200), batch_size=20, class_mode='binary' ) #%% md # keras内置经典网络实现 #%% covn_base = VGG16(weights=None, include_top=False) #%% covn_base.summary() #%% model = keras.Sequential() model.add(covn_base) model.add(layers.GlobalAveragePooling2D()) model.add(layers.Dense(512, activation='relu')) model.add(layers.Dense(1, activation='sigmoid')) #%% model.summary() #%% covn_base.trainable = False #设置权重不可变,卷积基不可变 #%% model.summary() #%% model.compile(optimizer=Adam(lr=0.001), loss='binary_crossentropy', metrics=['acc']) #%% history = model.fit_generator( train_generator, steps_per_epoch=100, epochs=15, validation_data=test_generator, validation_steps=50) #%% import matplotlib.pyplot as plt # %matplotlib inline #%% print(history.history) plt.plot(history.epoch, history.history['loss'], 'r', label='loss') # plt.plot(history.epoch, history.history['val_loss'], 'b--', label='val_loss') plt.legend() #%% plt.plot(history.epoch, history.history['acc'], 'r') # plt.plot(history.epoch, history.history['val_acc'], 'b--')
标签:#%%,12,keras,train,test,识别,os,dir,history From: https://www.cnblogs.com/liucaizhi/p/18192387