Python Keras ValueError:尺寸必须相等,但对于';{{node Equal}}';具有输入形状:[?、9]、?、300400]
我正在尝试训练一个非常简单的Keras网络来对一些保存为Python Keras ValueError:尺寸必须相等,但对于';{{node Equal}}';具有输入形状:[?、9]、?、300400],python,keras,neural-network,tensorflow2.0,Python,Keras,Neural Network,Tensorflow2.0,我正在尝试训练一个非常简单的Keras网络来对一些保存为np.array的热编码图像进行分类。输入数据结构由一个.npy文件组成,其中包含500个图像(每个图像有3个数组,因为它是RGB),每个图像有一个热编码数组,以确定其分类。每个图像为400x300像素(宽x高),目标输出应为9类。因此,每个图像的形状为(3004003),每个热编码标签列表的长度为9 这是我当前使用的代码: import numpy as np import cv2 import time import os import
np.array
的热编码图像进行分类。输入数据结构由一个.npy
文件组成,其中包含500个图像(每个图像有3个数组,因为它是RGB),每个图像有一个热编码数组,以确定其分类。每个图像为400x300像素(宽x高),目标输出应为9类。因此,每个图像的形状为(3004003)
,每个热编码标签列表的长度为9
这是我当前使用的代码:
import numpy as np
import cv2
import time
import os
import pandas as pd
from collections import deque
from random import shuffle
import pickle
# Do not display following messages:
# 0 = all messages are logged (default behavior)
# 1 = INFO messages are not printed
# 2 = INFO and WARNING messages are not printed
# 3 = INFO, WARNING, and ERROR messages are not printed
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0],True)
#os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
from keras import Input
from keras.models import load_model
lr = 0.01 # Learning Rate
WIDTH = 400
HEIGHT = 300
file_name = 'path/to/training_data.npy'
train_data = np.load(file_name, allow_pickle=True)
SAMPLE = len(train_data)
print('training_data.npy - Sample Size: {}'.format(SAMPLE))
X = np.array([i[0] for i in train_data]) / 255.0 # Divide to normalize values between 0 and 1
print('X shape: {}'.format(str(X.shape)))
Y = np.array([i[1] for i in train_data])
print("============================")
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(WIDTH, HEIGHT, 3)))
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(9, activation='softmax'))
model.compile(
optimizer = tf.keras.optimizers.SGD(lr=lr),
loss = 'mse',
metrics = ['acc']
)
model.summary()
model.fit(X, Y, epochs=5)
print("============================")
但是,当我尝试运行model.fit()
时,总是会遇到相同的错误:
WARNING:tensorflow:Model was constructed with shape (None, 400, 300, 3) for input Tensor("input_1:0", shape=(None, 400, 300, 3), dtype=float32), but it was called on an input with incompatible shape (None, 300, 400, 3).
Traceback (most recent call last):
File "test.py", line 78, in <module>
model.fit(X, Y, epochs=5)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\engine\training.py", line 108, in _method_wrapper
return method(self, *args, **kwargs)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1098, in fit
tmp_logs = train_function(iterator)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
result = self._call(*args, **kwds)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\eager\def_function.py", line 823, in _call
self._initialize(args, kwds, add_initializers_to=initializers)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\eager\def_function.py", line 697, in _initialize
*args, **kwds))
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\eager\function.py", line 2855, in _get_concrete_function_internal_garbage_collected
graph_function, _, _ = self._maybe_define_function(args, kwargs)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\eager\function.py", line 3213, in _maybe_define_function
graph_function = self._create_graph_function(args, kwargs)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\eager\function.py", line 3075, in _create_graph_function
capture_by_value=self._capture_by_value),
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\framework\func_graph.py", line 986, in func_graph_from_py_func
func_outputs = python_func(*func_args, **func_kwargs)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\eager\def_function.py", line 600, in wrapped_fn
return weak_wrapped_fn().__wrapped__(*args, **kwds)
File "D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\framework\func_graph.py", line 973, in wrapper
raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\engine\training.py:806 train_function *
return step_function(self, iterator)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\engine\training.py:796 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1211 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2585 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
return fn(*args, **kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\engine\training.py:789 run_step **
outputs = model.train_step(data)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\engine\training.py:759 train_step
self.compiled_metrics.update_state(y, y_pred, sample_weight)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\engine\compile_utils.py:409 update_state
metric_obj.update_state(y_t, y_p, sample_weight=mask)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\utils\metrics_utils.py:90 decorated
update_op = update_state_fn(*args, **kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\metrics.py:176 update_state_fn
return ag_update_state(*args, **kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\metrics.py:612 update_state **
matches = ag_fn(y_true, y_pred, **self._fn_kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
return target(*args, **kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\keras\metrics.py:3309 sparse_categorical_accuracy
return math_ops.cast(math_ops.equal(y_true, y_pred), K.floatx())
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
return target(*args, **kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\ops\math_ops.py:1613 equal
return gen_math_ops.equal(x, y, name=name)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\ops\gen_math_ops.py:3224 equal
name=name)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\framework\op_def_library.py:744 _apply_op_helper
attrs=attr_protos, op_def=op_def)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\framework\func_graph.py:593 _create_op_internal
compute_device)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\framework\ops.py:3485 _create_op_internal
op_def=op_def)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\framework\ops.py:1975 __init__
control_input_ops, op_def)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site-packages\tensorflow\python\framework\ops.py:1815 _create_c_op
raise ValueError(str(e))
ValueError: Dimensions must be equal, but are 9 and 400 for '{{node Equal}} = Equal[T=DT_FLOAT, incompatible_shape_error=true](Cast_1, Cast_2)' with input shapes: [?,9], [?,300,400].
警告:tensorflow:Model是用输入张量的形状(None,400300,3)构造的(“input_1:0”,shape=(None,400300,3),dtype=float32),但它是在具有不兼容形状(None,300400,3)的输入上调用的。
回溯(最近一次呼叫最后一次):
文件“test.py”,第78行,在
模型拟合(X,Y,历元=5)
文件“D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\engine\training.py”,第108行,在方法包装中
返回方法(self、*args、**kwargs)
文件“D:\Anaconda3\envs\pygta5_env\u tf2.0\lib\site packages\tensorflow\python\keras\engine\training.py”,第1098行
tmp_logs=训练函数(迭代器)
文件“D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\eager\def_function.py”,第780行,在u调用中__
结果=自身调用(*args,**kwds)
文件“D:\Anaconda3\envs\pygta5\u env\u tf2.0\lib\site packages\tensorflow\python\eager\def\u function.py”,第823行,在\ u调用中
self.\u初始化(参数、KWD、添加初始值设定项到=初始值设定项)
文件“D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\eager\def_function.py”,第697行,在_initialize中
*args,**科威特第纳尔)
文件“D:\Anaconda3\envs\pygta5\u env\u tf2.0\lib\site packages\tensorflow\python\eager\function.py”,第2855行,位于“获取混凝土\u函数\u内部垃圾\u收集”
图函数,自我,可能定义函数(args,kwargs)
文件“D:\Anaconda3\envs\pygta5\u env\u tf2.0\lib\site packages\tensorflow\python\eager\function.py”,第3213行,在函数“定义”中
graph\u function=self.\u create\u graph\u function(args,kwargs)
文件“D:\Anaconda3\envs\pygta5\u env\u tf2.0\lib\site packages\tensorflow\python\eager\function.py”,第3075行,位于创建图函数中
按值捕获=自身。_按值捕获),
文件“D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\framework\func_graph.py”,第986行,位于_py_func的func_图中
func_outputs=python_func(*func_args,**func_kwargs)
文件“D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\eager\def_function.py”,第600行,包装为\u fn
返回弱_-wrapped_-fn()
文件“D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\framework\func_graph.py”,包装器中第973行
将e.ag\u错误\u元数据引发到\u异常(e)
ValueError:在用户代码中:
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\engine\training.py:806 train_函数*
返回步骤_函数(self、迭代器)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\engine\training.py:796 step_函数**
输出=模型。分配策略。运行(运行步骤,参数=(数据,)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\distribute\distribute_lib.py:1211运行
返回self.\u扩展。为每个\u副本调用\u(fn,args=args,kwargs=kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\distribute\distribute_lib.py:2585为每个_副本调用_
返回自我。为每个副本(fn、ARG、kwargs)调用
D:\Anaconda3\envs\pygta5\u env\u tf2.0\lib\site packages\tensorflow\python\distribute\distribute\u lib.py:2945\u调用\u每个\u副本
返回fn(*args,**kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\engine\training.py:789运行步骤**
输出=型号列车步进(数据)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\engine\training.py:759 train\u步骤
自我编译的度量。更新度量状态(y,y,样本权重)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\engine\compile_utils.py:409 update_state
度量对象更新状态(y\u t,y\u p,样本重量=掩码)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\utils\metrics_utils.py:90
update_op=update_state_fn(*args,**kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\metrics.py:176 update\u state\u fn
返回AGU更新状态(*args,**kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\metrics.py:612更新状态**
匹配项=ag\u fn(y\u真,y\u pred,**自我.\u fn\u kwargs)
D:\Anaconda3\envs\pygta5_env\u tf2.0\lib\site packages\tensorflow\python\util\dispatch.py:201包装器
返回目标(*args,**kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\keras\metrics.py:3309稀疏分类精度
返回math_ops.cast(math_ops.equal(y_true,y_pred),K.floatx())
D:\Anaconda3\envs\pygta5_env\u tf2.0\lib\site packages\tensorflow\python\util\dispatch.py:201包装器
返回目标(*args,**kwargs)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\ops\math_ops.py:1613
返回gen_math_ops.equal(x,y,name=name)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\ops\gen_math_ops.py:3224
名称=名称)
D:\Anaconda3\envs\pygta5_env_tf2.0\lib\site packages\tensorflow\python\framework\op_def_library.py:744_apply_op_helper
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(filters=2, kernel_size=2, input_shape=(HEIGHT,WIDTH,3)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(9, activation='relu'))
import numpy as np
import cv2
import time
import os
import pandas as pd
from collections import deque
from random import shuffle
import pickle
# Do not display following messages:
# 0 = all messages are logged (default behavior)
# 1 = INFO messages are not printed
# 2 = INFO and WARNING messages are not printed
# 3 = INFO, WARNING, and ERROR messages are not printed
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
physical_devices = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_memory_growth(physical_devices[0],True)
#os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
from keras import Input
from keras.models import load_model
lr = 0.01 # Learning Rate
WIDTH = 400
HEIGHT = 300
file_name = 'path/to/training_data.npy'
train_data = np.load(file_name, allow_pickle=True)
SAMPLE = len(train_data)
print('training_data.npy - Sample Size: {}'.format(SAMPLE))
X = np.array([i[0] for i in train_data]) / 255.0 # Divide to normalize values between 0 and 1
print('X shape: {}'.format(str(X.shape)))
Y = np.array([i[1] for i in train_data])
print("============================")
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(filters=2, kernel_size=2, input_shape=(HEIGHT,WIDTH,3)))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(9, activation='relu'))
model.compile(
optimizer = tf.keras.optimizers.SGD(lr=lr),
loss = 'mse',
metrics = ['acc']
)
model.summary()
model.fit(X, Y, epochs=5)
print("============================")