Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';str';对象不是迭代器_Python_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Python 类型错误:';str';对象不是迭代器

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

我正在试着运行一个关于使用macOS Anaconda的基本CNN。 所有Keras ati都是最新的(至少我认为是这样,但我确信是这样)

除了我需要运行这条线路的时候,我可以运行任何东西

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个纪元开始(即使没有运行),没有显示错误,代码只移动到新行。