ValueError:检查输入时出错:要求conv2d_input具有4个维度,但得到的却是形状为(None,1)的数组



我完成了由20个类组成的模型的训练,精度达到0.9993,目前正在进行测试。我正在学习这个教程,但我在上遇到了错误

prediction = model.predict(['test1.jpg'])

训练数据定义为

for features, label in training_data:
x.append(features)
y.append(label)
x = np.array(x).reshape(-1, IMG_SIZE, IMG_SIZE,1)

这是我对cnn 的定义

x = pickle.load(open("x.pickle", "rb" ))
y = pickle.load(open("y.pickle", "rb"))
x = x/255.0
model = Sequential()
model.add(Conv2D(64,(3,3), input_shape = x.shape[1:IMG_SIZE]))
model.add(Activation("relu"))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Conv2D(64,(3,3), input_shape  = x.shape[1:IMG_SIZE]))
model.add(Activation("relu"))
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(64))
model.add(Dense(20))
model.add(Activation("sigmoid"))

这也是我对模型的总结

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 222, 222, 64)      640       
_________________________________________________________________
activation (Activation)      (None, 222, 222, 64)      0         
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 111, 111, 64)      0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 109, 109, 64)      36928     
_________________________________________________________________
activation_1 (Activation)    (None, 109, 109, 64)      0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 54, 54, 64)        0         
_________________________________________________________________
flatten (Flatten)            (None, 186624)            0         
_________________________________________________________________
dense (Dense)                (None, 64)                11944000  
_________________________________________________________________
dense_1 (Dense)              (None, 20)                1300      
_________________________________________________________________
activation_2 (Activation)    (None, 20)                0         
=================================================================
Total params: 11,982,868
Trainable params: 11,982,868
Non-trainable params: 0
_________________________________________________________________

我得到的错误是

----------------------------------------------------------------------------ValueError Traceback(最近调用最后)---->1预测=模型预测(['test1.jpg'])

~\Anaconda3\envs\tensorflow_cpu\lib\site packages\tensorflow_core\python\keras\engine\training.py in predict(self,x,batch_size,verbose,steps,callbacks,max_queue_size,worker,use_multiprocessing)907 max_ queue_,908个工人=工人,-->909 use_multiprocessing=use_multifrocessing)910911 def reset_metrics(自身):

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py在predict中(self、model、x、batch_size、verbose、steps、回调,**kwargs)460返回自我_模型迭代(461型号,ModeKeys.PREDICT,x=x,batch_size=batch_size,verbose=verbose,-->462步=步,回调=回调,**kwargs)463464

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py在_model_iteration(self、model、mode、x、y、batch_size、verbose、,sample_weight、steps、回调、**kwargs)442模式=模式,443 training_ context=training_,-->444 total_epochs=1)445 cbks.make_logs(模型、时期_logs、结果、模式)446

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py在run_one_epoch(模型、迭代器、execution_function、dataset_size,batch_size,strategy,steps_per_epoch,num_samples,mode,training_context,total_epochs)121步骤=步骤,模式=模式,大小=current_batch_size)作为批处理日志:122尝试:-->123 batch_outs=执行函数(迭代器)124除外(StopIteration,errors.OutOfRangeError):125#TODO(kaftan):关于tf函数和错误的文件错误。超出范围错误?

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py执行中函数(input_fn)84#numpy将张量转换为Eagle模式下的值。85返回nest.map_ structure(_non_none_constant_value,--->86 distributed_function(input_fn))8788返回执行_功能

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\earce\def_function.py在调用中(self、*args、**kwds)455456 tracing_count=自身_get_tracing_count()-->457结果=自我_调用(*args,**kwds)458,如果tracing_count==self_get_tracing_count():459自我_call_counter.called_without_tracing()

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\earce\def_function.pyin _call(self、*args、**kwds)501#这是调用的第一个调用,所以我们必须初始化。502 initializer_map=object_identity.ObjectIdentityDictionary()-->503自我_initialize(args、kwds、add_initializers_to=initializer_map)504最后:505#在这一点上,我们知道初始化已经完成(或更少的

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\earce\def_function.py在初始化中(self、args、kwds、add_initializers_to)406自身_混凝土_状态_fn=(407自我_stateful_fn_get_concrete_function_internal_argbage_collected(

pylint:disable=受保护的访问

-->408*args,**kwds))409410 def invalid_creator_scope(*unused_args,**unused_kwds):

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\earce\function.py在_get_concrete_function_internal_argbage_collected(self、*args,**kwargs)1846 if self.put_signature:1847 args,kwargs=无,无->1848 graph_function,_,_=自身_maybe_define_function(args,kwargs)1849返回graph_function 1850

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\earce\function.py在_maybe_define_function(self,args,kwargs)2148
graph_function=self中_function_cache.prprimary.get(cache_key,None)
2149如果graph_function为None:->2150 graph_function=self_create_graph_function(args,kwargs)2151 self_function_cache.prprimary[cache_key]=graph_function 2152返回graph_function,args,kwargs

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\earce\function.py在_create_graph_function(self、args、kwargs,override_flat_arg_shapes)2039个arg_names=arg_names,
2040个override_flate_arg_sShapes=override_fplat_arg_sapes,->2041 capture_by_value=self_capture_by_value)、2042自身_function_attributes,2043#告诉ConcreteFunction一旦它离开就清理它的图形

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\framework\func_graph.py在func_graph_from_py_func(名称,python_func,args,kwargs,签名,func_graph、签名、autograph_options、add_control_dependencies,arg_name,op_return_value,集合,capture_by_value,override_flat_arg_shapes)913 converted_func)914-->915 func_outputs=python_func(*func_args,**func_kwargs)916917#不变量:func_outputs只包含张量,CompositeTensors,

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\earce\def_function.py在wrapped_fn(*args,**kwds)中356#包装允许AutoGraph在转换后的函数中进行交换。我们给予357#函数对其自身进行弱引用以避免引用循环。-->358返回weak_wrapped_fn()换行(*args,**kwds)359 weak_wrapped_fn=weakref.ref(wrapped_fn)360

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py在distributed_function(input_iterator)中71策略=distribution_strategy_context.get_strategy()72个输出=策略.experimental_run_v2(--->73 per_replica_function,args=(型号,x,y,sample_weights))74#超出PerReplica输出减少或选取要返回的值。75 all_output=dist_utils.unwrap_output_dict(

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\distribute_lib.py在实验al_runv2(self、fn、args、kwargs)中758 fn=签名.tf_convert(fn,ag_ctx.control_status_ctx(),759 convert_by_default=False)-->760返回自我_extended.call_for_each_replica(fn,args=args,kwargs=kwargs)761762 def reduce(self,reduce_op,value,axis):

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\distribute_lib.py在call_for_each_replica(self,fn,args,kwargs)中1785 kwargs={}1786与self_container_strategy().scope():->1787年回归自我_call_for_each_replica(fn,args,kwargs)1788 1789 def_call_for_each _replica

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\distribute_lib.py在_call_for_each_replica(self,fn,args,kwargs)2130
self中_container_strategy(),2131
replica_id_in_sync_group=constant_op.constant(0,dtypes.int32)):->2132返回fn(*args,**kwargs)2133 2134 def_reduce_to(self,reduce_op,value,destination):

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\signature\pimpl\api.py在包装器中(*args,**kwargs)290 def包装器(*args,**kwargs):291,带有ag_ctx.ControlStatusCtx(状态=ag_ctx.status.DISABLED):-->292返回函数(*args,**kwargs)293294如果inspect.isfunction(func)或inspect.ismethod(functionc):

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py在_predict_on_batch中(解析参数失败)160 def_predict_on_batch(型号,x,y=无,sample_weights=无):161 dely,sample_weights-->162返回predict_on_batch(型号,x)163164函数=_predict_on_batch

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_v2_utils.py在predict_on_batch(模型,x)中357#验证和标准化用户数据。358个输入,_,_=模型_标准化用户数据(-->359 x,extract_tennors_from_dataset=真)360361#如果model._distribution_strategy为True,则我们处于复制上下文中

_standardize_user_data(self,x,y,sample_weight,class_weight,batch_size、check_steps、steps_name、steps、validation_split、shuffle、,extract_ttensors_from_dataset)2470 feed_put_shapes,
2471 check_batch_axis=False,#不强制执行批次大小->2472 exception_prefix='input')2473 2474#获取输入数据的类型规范,并在必要时对其进行清理。

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py在standardize_input_data(数据、名称、形状、check_batch_axis,例外_前缀)

563                            ': expected ' + names[i] + ' to have ' +
564                            str(len(shape)) + ' dimensions, but got array '

-->565"带形状"+str(data_shape))566如果不是check_batch_axis:567 data_shape=data_shape[1:]

ValueError:检查输入时出错:要求conv2d_input为4维度,但得到具有形状的数组(无,1)

首先,第一个conv层的input_shape似乎是错误的。

input_shape = (IMG_SIZE, IMG_SIZE,1)

model.add(Conv2D(64,(3,3), input_shape = (IMG_SIZE, IMG_SIZE,1))

其次,不需要为任何中间层指定input_shape

model.add(Conv2D(64,(3,3), input_shape = x.shape[1:IMG_SIZE]))应为

model.add(Conv2D(64,(3,3))

您正试图预测某个字符串['test1.jpg'],为什么?您需要将数据准备为与训练相同的形状和分布-例如,加载图像,将其调整大小/裁剪为相关大小,将其归一化为[0,1]范围(如果这是您在训练期间所做的)等

最新更新