ValueError:logits 和标签必须具有相同的形状 ((None, 23, 23, 1) vs (None, 1))

Posted

技术标签:

【中文标题】ValueError:logits 和标签必须具有相同的形状 ((None, 23, 23, 1) vs (None, 1))【英文标题】:ValueError: logits and labels must have the same shape ((None, 23, 23, 1) vs (None, 1)) 【发布时间】:2021-04-08 07:54:34 【问题描述】:

我是 ML 新手,所以我真的不知道在做什么我不知道 logits 在代码中的含义我什至没有编写 logits 我只是按照 YouTube 教程来熟悉环境。 .这是整个代码感谢您的帮助..我知道***上已经有这种帖子但我认为它不适用于我的情况也许我不知道但我仍然不知道知道如何实施它,即使这样做也请帮助我在这里苦苦挣扎:) tnx 代码:

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.preprocessing import image
from tensorflow.keras.optimizers import RMSprop
import matplotlib.pyplot as plt
import tensorflow as tf
import cv2
import os
import numpy as np 
    
img = cv2.imread("/content/drive/MyDrive/data/train/ha/2.jpg").shape
print(img)
imgg = image.load_img("/content/drive/MyDrive/data/train/ha/2.jpg")
plt.imshow(imgg)
train = ImageDataGenerator(rescale=1/255)
validation = ImageDataGenerator(rescale=1/255)
train_dataset = train.flow_from_directory("/content/drive/MyDrive/data/train/", target_size = (100,100),
    batch_size = 3,
    class_mode ="binary")
    print(train_dataset.class_indices)
    
validation_dataset = train.flow_from_directory("/content/drive/MyDrive/data/validate/", 
    target_size = (100,100), 
    batch_size = 3, 
    class_mode ="binary")
    
    
model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(16,(3,3),activation = 'relu',input_shape =(200,200,3)),
    tf.keras.layers.MaxPool2D(2,2),
    #
    tf.keras.layers.Conv2D(32,(3,3),activation = 'relu'),
    tf.keras.layers.MaxPool2D(2,2),
    #
    tf.keras.layers.Conv2D(64,(3,3),activation = 'relu'),
    tf.keras.layers.MaxPool2D(2,2),
    ##
    tf.keras.layers.Dense(134,activation = 'relu'),
    ##
    tf.keras.layers.Dense(1,activation = 'sigmoid')
    ])
    
    model.compile(loss = 'binary_crossentropy',
    optimizer = RMSprop(lr=0.001),
    metrics =['accuracy'])
    
    model_fit = model.fit(train_dataset,
    steps_per_epoch = 3,
    epochs = 1,
    validation_data = validation_dataset)

错误:

2021-01-01 13:39:18.588397: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcudart.so.10.1
(51, 51, 3)
Found 9 images belonging to 2 classes.
'ha': 0, 'hu': 1
Found 4 images belonging to 2 classes.
2021-01-01 13:39:22.999078: I tensorflow/compiler/jit/xla_cpu_device.cc:41] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-01-01 13:39:23.026197: I tensorflow/stream_executor/platform/default/dso_loader.cc:49] Successfully opened dynamic library libcuda.so.1
2021-01-01 13:39:23.092853: E tensorflow/stream_executor/cuda/cuda_driver.cc:328] failed call to cuInit: CUDA_ERROR_NO_DEVICE: no CUDA-capable device is detected
2021-01-01 13:39:23.092917: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (6e4fde799083): /proc/driver/nvidia/version does not exist
2021-01-01 13:39:23.093374: I tensorflow/compiler/jit/xla_gpu_device.cc:99] Not creating XLA devices, tf_xla_enable_xla_devices not set
2021-01-01 13:39:23.846859: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:116] None of the MLIR optimization passes are enabled (registered 2)
2021-01-01 13:39:23.850373: I tensorflow/core/platform/profile_utils/cpu_utils.cc:112] CPU Frequency: 2300000000 Hz

Traceback (most recent call last):
  File "/content/drive/MyDrive/main.py", line 48, in <module>
    validation_data = validation_dataset)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py", line 1100, in fit
    tmp_logs = self.train_function(iterator)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py", line 828, in __call__
    result = self._call(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py", line 871, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py", line 726, in _initialize
    *args, **kwds))
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py", line 2969, in _get_concrete_function_internal_garbage_collected
    graph_function, _ = self._maybe_define_function(args, kwargs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py", line 3361, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/function.py", line 3206, in _create_graph_function
    capture_by_value=self._capture_by_value),
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py", line 990, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/eager/def_function.py", line 634, in wrapped_fn
    out = weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py", line 977, in wrapper
    raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:805 train_function  *
        return step_function(self, iterator)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:795 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:788 run_step  **
        outputs = model.train_step(data)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:756 train_step
        y, y_pred, sample_weight, regularization_losses=self.losses)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/compile_utils.py:203 __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/losses.py:152 __call__
        losses = call_fn(y_true, y_pred)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/losses.py:256 call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/losses.py:1608 binary_crossentropy
        K.binary_crossentropy(y_true, y_pred, from_logits=from_logits), axis=-1)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/backend.py:4979 binary_crossentropy
        return nn.sigmoid_cross_entropy_with_logits(labels=target, logits=output)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/nn_impl.py:174 sigmoid_cross_entropy_with_logits
        (logits.get_shape(), labels.get_shape()))

    ValueError: logits and labels must have the same shape ((None, 23, 23, 1) vs (None, 1))

【问题讨论】:

【参考方案1】:

您的问题是密集层的输入必须是向量。实现这一目标

you can
replace tf.keras.layers.MaxPool2D(2,2)
with  tf.keras.layers.GlobalMaxPooling2D()

或者只是添加

tf.keras.layers.GlobalMaxPooling2D() after tf.keras.layers.MaxPool2D(2,2)

【讨论】:

Gerry P 我认为这解决了它非常感谢...必须回答它:) ValueError:conv2d_1 层的输入 0 与该层不兼容::预期 min_ndim=4,发现 ndim=2。收到的完整形状:(无,16)

以上是关于ValueError:logits 和标签必须具有相同的形状 ((None, 23, 23, 1) vs (None, 1))的主要内容,如果未能解决你的问题,请参考以下文章

ValueError:logits 和标签必须具有相同的形状 ((None, 4) vs (None, 1))

ValueError:尝试对 IMDB 评论进行分类时,logits 和标签必须具有相同的形状((无,1)与(无,10000))

TensorFlow ValueError:logits 和标签必须具有相同的形状 ((25, 1) vs (1, 1))

如何修复 Logits 和 Labels 必须具有相同的形状?

Tensorflow:logits 和标签必须具有相同的第一维

尽管对稀疏目标使用稀疏分类熵,但 Logits 和标签必须具有相同的第一维误差