我正在尝试从Udemy课程中运行CNN代码,只是训练猫和狗的图像进行分类。但是,我在训练步骤中遇到了这个值错误:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-14-894200829115> in <module>()
----> 1 cnn.fit(x = training_set, validation_data = test_set, epochs = 25)
~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py in _method_wrapper(self,
*args, **kwargs)
106 def _method_wrapper(self, *args, **kwargs):
107 if not self._in_multi_worker_mode(): # pylint: disable=protected-access
--> 108 return method(self, *args, **kwargs)
109
110 # Running inside `run_distribute_coordinator` already.
~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y,
batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight,
sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size,
validation_freq, max_queue_size, workers, use_multiprocessing)
1061 use_multiprocessing=use_multiprocessing,
1062 model=self,
-> 1063 steps_per_execution=self._steps_per_execution)
1064
1065 # Container that configures and calls `tf.keras.Callback`s.
~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in __init__(self, x, y,
sample_weight, batch_size, steps_per_epoch, initial_epoch, epochs, shuffle, class_weight,
max_queue_size, workers, use_multiprocessing, model, steps_per_execution)
1115 use_multiprocessing=use_multiprocessing,
1116 distribution_strategy=ds_context.get_strategy(),
-> 1117 model=model)
1118
1119 strategy = ds_context.get_strategy()
~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in __init__(self, x, y,
sample_weights, shuffle, workers, use_multiprocessing, max_queue_size, model, **kwargs)
914 max_queue_size=max_queue_size,
915 model=model,
--> 916 **kwargs)
917
918 @staticmethod
~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in __init__(self, x, y,
sample_weights, workers, use_multiprocessing, max_queue_size, model, **kwargs)
786 peek, x = self._peek_and_restore(x)
787 peek = self._standardize_batch(peek)
--> 788 peek = _process_tensorlike(peek)
789
790 # Need to build the Model on concrete input shapes.
~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in _
process_tensorlike(inputs)
1019 return x
1020
-> 1021 inputs = nest.map_structure(_convert_numpy_and_scipy, inputs)
1022 return nest.list_to_tuple(inputs)
1023
~\Anaconda3\lib\site-packages\tensorflow\python\util\nest.py in map_structure(func, *structure,
**kwargs)
633
634 return pack_sequence_as(
--> 635 structure[0], [func(*x) for x in entries],
636 expand_composites=expand_composites)
637
~\Anaconda3\lib\site-packages\tensorflow\python\util\nest.py in <listcomp>(.0)
633
634 return pack_sequence_as(
--> 635 structure[0], [func(*x) for x in entries],
636 expand_composites=expand_composites)
637
~\Anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in
convert_numpy_and_scipy(x)
1014 if issubclass(x.dtype.type, np.floating):
1015 dtype = backend.floatx()
-> 1016 return ops.convert_to_tensor(x, dtype=dtype)
1017 elif scipy_sparse and scipy_sparse.issparse(x):
1018 return _scipy_sparse_to_sparse_tensor(x)
~\Anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in convert_to_tensor(value, dtype,
name, as_ref, preferred_dtype, dtype_hint, ctx, accepted_result_types)
1497
1498 if ret is None:
-> 1499 ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref)
1500
1501 if ret is NotImplemented:
~\Anaconda3\lib\site-packages\tensorflow\python\framework\tensor_conversion_registry.py in
_default_conversion_function(***failed resolving arguments***)
50 def _default_conversion_function(value, dtype, name, as_ref):
51 del as_ref # Unused.
---> 52 return constant_op.constant(value, dtype, name=name)
53
54
~\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in constant(value, dtype,
shape, name)
262 """
263 return _constant_impl(value, dtype, shape, name, verify_shape=False,
--> 264 allow_broadcast=True)
265
266
~\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in _constant_impl(value,
dtype, shape, name, verify_shape, allow_broadcast)
273 with trace.Trace("tf.constant"):
274 return _constant_eager_impl(ctx, value, dtype, shape, verify_shape)
--> 275 return _constant_eager_impl(ctx, value, dtype, shape, verify_shape)
276
277 g = ops.get_default_graph()
~\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in _constant_eager_impl(ctx,
value, dtype, shape, verify_shape)
298 def _constant_eager_impl(ctx, value, dtype, shape, verify_shape):
299 """Implementation of eager constant."""
--> 300 t = convert_to_eager_tensor(value, ctx, dtype)
301 if shape is None:
302 return t
~\Anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in
convert_to_eager_tensor(value, ctx, dtype)
96 dtype = dtypes.as_dtype(dtype).as_datatype_enum
97 ctx.ensure_initialized()
---> 98 return ops.EagerTensor(value, ctx.device_name, dtype)
99
100
ValueError: object __array__ method not producing an array
下面是代码段:
# Importing the libraries
import tensorflow as tf
from keras.preprocessing.image import ImageDataGenerator
tf.__version__
# Part 1 - Data Preprocessing
# Preprocessing the Training set
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
training_set = train_datagen.flow_from_directory('dataset/training_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
# Preprocessing the Test set
test_datagen = ImageDataGenerator(rescale = 1./255)
test_set = test_datagen.flow_from_directory('dataset/test_set',
target_size = (64, 64),
batch_size = 32,
class_mode = 'binary')
# Part 2 - Building the CNN
# Initialising the CNN
cnn = tf.keras.models.Sequential()
# Step 1 - Convolution
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=[64, 64,
3]))
# Step 2 - Pooling
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))
# Adding a second convolutional layer
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu'))
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2, strides=2))
# Step 3 - Flattening
cnn.add(tf.keras.layers.Flatten())
# Step 4 - Full Connection
cnn.add(tf.keras.layers.Dense(units=128, activation='relu'))
# Step 5 - Output Layer
cnn.add(tf.keras.layers.Dense(units=1, activation='sigmoid'))
# Part 3 - Training the CNN
# Compiling the CNN
cnn.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
# Training the CNN on the Training set and evaluating it on the Test set
cnn.fit(x = training_set, validation_data = test_set, epochs = 25) # the line causing problem
如您所见,在训练步骤之前,其他所有功能都可以正常工作:
我正在使用从Win10上的Anaconda3安装的Python 3.7.0。我尝试了以下方法:
以上两种方法均无效,因为问题仍然存在。安装的keras版本是2.4.3。但是,代码可以在Google Colab上顺利运行,唯一的区别在于,由于Google Colab未与主机操作系统文件系统连接,因此使用命令从DropBox加载和解压缩了数据图像。
对于导致错误的原因以及如何解决问题的任何见解和帮助,我将不胜感激。
答案 0 :(得分:0)
在下面所示模型的代码中
cnn.add(tf.keras.layers.Conv2D(filters=32, kernel_size=3, activation='relu', input_shape=[64, 64,
3]))
input_shape是一个元组而不是列表。应该是input_shape =(64,64)。可能还有其他问题,但请先解决