Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.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 Keras ValueError:尺寸必须相等,但对于';{{node Equal}}';具有输入形状:[?、9]、?、300400]_Python_Keras_Neural Network_Tensorflow2.0 - Fatal编程技术网

Python Keras ValueError:尺寸必须相等,但对于';{{node Equal}}';具有输入形状:[?、9]、?、300400]

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

我正在尝试训练一个非常简单的Keras网络来对一些保存为
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("============================")