Python 类型错误:';str';对象不是迭代器
我正在试着运行一个关于使用macOS Anaconda的基本CNN。 所有Keras ati都是最新的(至少我认为是这样,但我确信是这样) 除了我需要运行这条线路的时候,我可以运行任何东西Python 类型错误:';str';对象不是迭代器,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我正在试着运行一个关于使用macOS Anaconda的基本CNN。 所有Keras ati都是最新的(至少我认为是这样,但我确信是这样) 除了我需要运行这条线路的时候,我可以运行任何东西 classifier.fit_generator('training_set', steps_per_epoch = 8000, epochs = 25, validation_dat
classifier.fit_generator('training_set',
steps_per_epoch = 8000,
epochs = 25,
validation_data = test_set
当我试图运行时,我得到了错误
TypeError:“str”对象不是迭代器
这是我的密码
# Importing the Keras libraries and packages
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
# Initialising the CNN
classifier = Sequential()
# Step 1 - Convolution
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
# Step 2 - Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Adding a second convolutional layer
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Step 3 - Flattening
classifier.add(Flatten())
# Step 4 - Full connection
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
# Compiling the CNN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
# Part 2 - Fitting the CNN to the images
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('/Users/Dan/Desktop/CNN/dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
test_set = test_datagen.flow_from_directory('/Users/Dan/Desktop/CNN/dataset/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
classifier.fit_generator('training_set',
steps_per_epoch = 8000,
epochs = 25,
validation_data = test_set,
validation_steps = 2000)
# Saving Weights
weights = classifier.save_weights
"""
Single Prediction
"""
import numpy as np
from keras.preprocessing import image
test_image = image.load_img(('dataset/predictions/cat_or_dog_2.jpg'), target_size=(64, 64))
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image, axis = 0)
result = classifier.predict(test_image)
training_set.class_indices
if result[0][0] == 1:
prediction = 'Dog'
else:
prediction = 'Cat'
这是运行到错误的代码本身
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
# Initialising the CNN
classifier = Sequential()
# Step 1 - Convolution
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
# Step 2 - Pooling
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Adding a second convolutional layer
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
# Step 3 - Flattening
classifier.add(Flatten())
# Step 4 - Full connection
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))
# Compiling the CNN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
Using TensorFlow backend.
2019-11-25 19:39:19.093497: I tensorflow/core/platform/cpu_feature_guard.cc:145] This TensorFlow binary is optimized with Intel(R) MKL-DNN to use the following CPU instructions in performance critical operations: SSE4.1 SSE4.2 AVX AVX2 FMA
To enable them in non-MKL-DNN operations, rebuild TensorFlow with the appropriate compiler flags.
2019-11-25 19:39:19.095093: I tensorflow/core/common_runtime/process_util.cc:115] Creating new thread pool with default inter op setting: 4. Tune using inter_op_parallelism_threads for best performance.
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('/Users/Dan/Desktop/CNN/dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
Found 8000 images belonging to 2 classes.
test_set = test_datagen.flow_from_directory('/Users/Dan/Desktop/CNN/dataset/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
Found 2000 images belonging to 2 classes.
classifier.fit_generator('training_set',
steps_per_epoch = 8000,
epochs = 25,
validation_data = test_set,
validation_steps = 2000)
Epoch 1/25
Traceback (most recent call last):
File "<ipython-input-7-e4696e5027ff>", line 5, in <module>
validation_steps = 2000)
File "/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/keras/legacy/interfaces.py", line 91, in wrapper
return func(*args, **kwargs)
File "/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/keras/engine/training.py", line 1732, in fit_generator
initial_epoch=initial_epoch)
File "/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/keras/engine/training_generator.py", line 185, in fit_generator
generator_output = next(output_generator)
File "/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/keras/utils/data_utils.py", line 742, in get
six.reraise(*sys.exc_info())
File "/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/six.py", line 696, in reraise
raise value
File "/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/keras/utils/data_utils.py", line 711, in get
inputs = future.get(timeout=30)
File "/Users/Dan/opt/anaconda3/lib/python3.7/multiprocessing/pool.py", line 657, in get
raise self._value
File "/Users/Dan/opt/anaconda3/lib/python3.7/multiprocessing/pool.py", line 121, in worker
result = (True, func(*args, **kwds))
File "/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/keras/utils/data_utils.py", line 650, in next_sample
return six.next(_SHARED_SEQUENCES[uid])
TypeError: 'str' object is not an iterator
从keras.models导入
从keras.layers导入Conv2D
从keras.layers导入MaxPoolig2D
从keras.layers导入展平
从keras.layers导入稠密
#初始化CNN
分类器=顺序()
#步骤1-卷积
add(Conv2D(32,(3,3),input_shape=(64,64,3),activation='relu'))
#步骤2-池
add(MaxPoolig2D(池大小=(2,2)))
#添加第二个卷积层
add(Conv2D(32,(3,3),activation='relu'))
add(MaxPoolig2D(池大小=(2,2)))
#步骤3-展平
添加(展平())
#步骤4-完全连接
add(密集(单位=128,激活=relu'))
add(稠密(单位=1,激活='sigmoid'))
#编辑CNN
compile(优化器='adam',loss='binary\u crossentropy',metrics=['accurity'])
使用TensorFlow后端。
2019-11-25 19:39:19.093497:I tensorflow/core/platform/cpu_feature_guard.cc:145]此tensorflow二进制文件使用Intel(R)MKL-DNN进行优化,以便在性能关键型操作中使用以下cpu指令:SSE4.1 SSE4.2 AVX AVX2 FMA
要在非MKL DNN操作中启用它们,请使用适当的编译器标志重新生成TensorFlow。
2019-11-25 19:39:19.095093:I tensorflow/core/common_runtime/process_util.cc:115]使用默认的操作间设置创建新线程池:4。使用inter_op_parallelism_线程进行优化,以获得最佳性能。
从keras.preprocessing.image导入ImageDataGenerator
列车数据发生器=图像数据发生器(重缩放=1./255,
剪切范围=0.2,
缩放范围=0.2,
水平(翻转=真)
test_datagen=ImageDataGenerator(重缩放=1./255)
training_set=train_datagen.flow_from_目录(“/Users/Dan/Desktop/CNN/dataset/training_set”,
目标_大小=(64,64),
批次大小=32,
class_模式='binary')
找到了8000张属于2类的图片。
test_set=test_datagen.flow_,来自_目录('/Users/Dan/Desktop/CNN/dataset/test_set',
目标_大小=(64,64),
批次大小=32,
class_模式='binary')
找到了2000张属于2个类的图片。
分类器。装配生成器(“训练集”,
每个历元的步数=8000,
纪元=25,
验证数据=测试集,
验证(步骤=2000)
纪元1/25
回溯(最近一次呼叫最后一次):
文件“”,第5行,在
验证(步骤=2000)
文件“/Users/Dan/opt/anaconda3/lib/python3.7/site packages/keras/legacy/interfaces.py”,第91行,在包装器中
返回函数(*args,**kwargs)
文件“/Users/Dan/opt/anaconda3/lib/python3.7/site packages/keras/engine/training.py”,第1732行,在fit_generator中
初始_历元=初始_历元)
文件“/Users/Dan/opt/anaconda3/lib/python3.7/site packages/keras/engine/training_generator.py”,第185行,在fit_generator中
发电机输出=下一个(输出发电机)
get中的文件“/Users/Dan/opt/anaconda3/lib/python3.7/site packages/keras/utils/data_utils.py”,第742行
六、重放(*sys.exc_info())
文件“/Users/Dan/opt/anaconda3/lib/python3.7/site-packages/six.py”,第696行,重新登录
增值
文件“/Users/Dan/opt/anaconda3/lib/python3.7/site packages/keras/utils/data_utils.py”,get中第711行
输入=future.get(超时=30)
get中第657行的文件“/Users/Dan/opt/anaconda3/lib/python3.7/multiprocessing/pool.py”
提升自我价值
文件“/Users/Dan/opt/anaconda3/lib/python3.7/multiprocessing/pool.py”,第121行,在worker中
结果=(True,func(*args,**kwds))
文件“/Users/Dan/opt/anaconda3/lib/python3.7/site packages/keras/utils/data_utils.py”,第650行,在下一个示例中
返回六个。下一个(\u共享\u序列[uid])
TypeError:“str”对象不是迭代器
我有什么遗漏吗?或者一行错误,因为我确信一切都正确。如果要传递字符串作为第一个参数,则要传递training\u set变量
classifier.fit_generator(training_set,
steps_per_epoch = 8000,
epochs = 25,
validation_data = test_set,
validation_steps = 2000)
不熟悉该软件包,但检查文档后发现培训集应为发电机: 生成器:序列的生成器或实例 (keras.utils.Sequence)对象,以避免在 使用多处理。发电机的输出必须为 元组(输入,目标)元组(输入,目标,样本权重)。 此元组(生成器的单个输出)生成单个批。 因此,此元组中的所有数组必须具有相同的长度(相等) 与此批次的大小相同)。不同批次可能具有不同的性能 尺寸。例如,历元的最后一批通常较小 如果数据集的大小不能被 批量大小预计生成器将对其数据进行循环 无限期地当每个历元批次的步骤已完成时,历元结束 由模型看到 但是您使用的字符串值为'training_set',我猜您的意思是training_set(不带引号)。
啊,是的,谢谢你解决了这个错误,但是现在代码运行了,但只从1/25个纪元开始(即使没有运行),没有显示错误,代码只移动到新行。