简体   繁体   English

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

[英]ValueError: logits and labels must have the same shape ((None, 1) vs (None, 2))

So I am trying to build a neural network with multiple outputs.所以我正在尝试建立一个具有多个输出的神经网络。 I want to recognize gender and age using a face image and then I will further add more outputs once this issue is resolved.我想使用面部图像识别性别和年龄,然后在解决此问题后进一步添加更多输出。

Input-type = Image (originally 200 200, resized to 64 64)输入类型 = 图像(最初为 200 200,调整为 64 64)
Output-type = Array(len = 2)输出类型 = Array(len = 2)

(Pdb) x_train.shape <br/>
(18965, 64, 64, 1)<br/>
(Pdb) y_train.shape <br/>
(18965, 2)<br/>
(Pdb) x_test.shape<br/>  
(4742, 64, 64, 1)<br/>
(Pdb) y_test.shape <br/>
(4742, 2)<br/>

Neural Network:-神经网络:-

   input_layer = Input((x_train[0].shape))
   conv1 = Conv2D(64,(4,4),activation="relu",strides=(2,2))(input_layer)
   batchnorm1 = BatchNormalization()(conv1)
   maxpool1 = MaxPooling2D((2,2))(batchnorm1)
   drop1 = Dropout(0.3)(maxpool1)
   conv2 = Conv2D(64,(4,4),activation="relu",strides=(2,2))(drop1)
   batchnorm2 = BatchNormalization()(conv2)
   maxpool2 = MaxPooling2D((2,2))(batchnorm2)
   drop2 = Dropout(0.3)(maxpool2)
   conv3 = Conv2D(64,(2,2), activation='relu',strides=(1,1))(drop2)
   dense = Dense(32,activation = 'relu')(conv3)
   flat = Flatten()(dense)
   dense1 = Dense(32,activation = 'relu')(flat)
   dense2 = Dense(32,activation = 'relu')(flat)
   age_out = Dense(1,activation = 'relu',name = 'age')(dense1)
   gen_out = Dense(1,activation= 'sigmoid', name = 'gen')(dense2)
   def scheduler(epoch, lr):
           if epoch<25:
               return lr
           elif epoch%25==0:
               return lr * 0.5
   learning_rate = tf.keras.callbacks.LearningRateScheduler(scheduler)
   adam = Adam(learning_rate=5e-5)
   model = Model(inputs=input_layer, outputs = [gen_out,age_out])
   # model._set_output_names  
   model.compile(loss={'gen':"binary_crossentropy",'age':"mae"},optimizer = adam, metrics=['accuracy'])
   model.fit(x_train,y_train,batch_size=50,validation_data = (x_test,y_test),epochs=100, callbacks=[learning_rate])

Error:-错误:-

Traceback (most recent call last):
  File "F:\projects\Ultimate Project\age.py", line 86, in <module>
    neural_network()
  File "F:\projects\Ultimate Project\age.py", line 78, in neural_network
    model.fit(x_train,y_train,batch_size=50,validation_data = (x_test,y_test),epochs=100, callbacks=[learning_rate])
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1100, in fit
    tmp_logs = self.train_function(iterator)
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\eager\def_function.py", line 828, in __call__
    result = self._call(*args, **kwds)
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\eager\def_function.py", line 871, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\eager\def_function.py", line 726, in _initialize
    *args, **kwds))
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\eager\function.py", line 2969, in _get_concrete_function_internal_garbage_collected
    graph_function, _ = self._maybe_define_function(args, kwargs)
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\eager\function.py", line 3361, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\eager\function.py", line 3206, in _create_graph_function
    capture_by_value=self._capture_by_value),
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\framework\func_graph.py", line 990, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\eager\def_function.py", line 634, in wrapped_fn
    out = weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\framework\func_graph.py", line 977, in wrapper
    raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:

    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\engine\training.py:805 train_function  *
        return step_function(self, iterator)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\engine\training.py:795 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1259 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2730 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3417 _call_for_each_replica
        return fn(*args, **kwargs)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\engine\training.py:788 run_step  **
        outputs = model.train_step(data)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\engine\training.py:756 train_step
        y, y_pred, sample_weight, regularization_losses=self.losses)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\engine\compile_utils.py:203 __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\losses.py:152 __call__
        losses = call_fn(y_true, y_pred)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\losses.py:256 call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
        return target(*args, **kwargs)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\losses.py:1608 binary_crossentropy
        K.binary_crossentropy(y_true, y_pred, from_logits=from_logits), axis=-1)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
        return target(*args, **kwargs)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\keras\backend.py:4979 binary_crossentropy
        return nn.sigmoid_cross_entropy_with_logits(labels=target, logits=output)
    F:\projects\Ultimate Project\env\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
        return target(*args, **kwargs)
    F:\projects\Ultimate Project\env\lib\site-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, 1) vs (None, 2))

As far as I can understand, this error means that the neural network is giving output in the shape of (none,1) but my actual output is of (none,2).据我所知,这个错误意味着神经网络给出的 output 的形状为 (none,1),但我的实际 output 的形状为 (none,2)。 If I am using this config for loss model.compile(loss=["binary_crossentropy","mae"],optimizer = adam, metrics=['accuracy']) with model = Model(inputs=input_layer, outputs = tf.keras.layers.concatenate([gen_out,age_out], axis=-1)) then it runs but it gives me only a single loss instead of separate losses for both output layers and that too goes negative after some epochs. If I am using this config for loss model.compile(loss=["binary_crossentropy","mae"],optimizer = adam, metrics=['accuracy']) with model = Model(inputs=input_layer, outputs = tf.keras.layers.concatenate([gen_out,age_out], axis=-1))然后它运行但它只给我一个单一的损失,而不是两个 output 层的单独损失,并且在一些时期之后也变成负数。

I tried my best to explain my problem if there is any confusion then my apologies, let me know and I will add it.如果有任何混淆,我会尽力解释我的问题,那么我很抱歉,让我知道,我会添加它。

You should also split the y_train and y_test like this:您还应该像这样拆分y_trainy_test

model.fit(x_train, [y_train[:, 0], y_train[:, 1]], batch_size=50,
          validation_data = (x_test, [y_test[:, 0], y_test[:, 1]] ),
          epochs=100, callbacks=[learning_rate])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ValueError:logits 和标签必须具有相同的形状 ((None, 5) vs (None, 1)) - ValueError: logits and labels must have the same shape ((None, 5) vs (None, 1)) ValueError:logits 和标签必须具有相同的形状 ((None, 6, 8, 1) vs (None, 1)) - ValueError: logits and labels must have the same shape ((None, 6, 8, 1) vs (None, 1)) ValueError:logits 和标签必须具有相同的形状 ((None, 2) vs (None, 1)) - ValueError: logits and labels must have the same shape ((None, 2) vs (None, 1)) ValueError:logits 和标签必须具有相同的形状 ((None, 4) vs (None, 1)) - ValueError: logits and labels must have the same shape ((None, 4) vs (None, 1)) CNN二元分类model ValueError: logits and labels must have the same shape ((None, 1) vs (None, None, None, None)) - CNN binary classification model ValueError: logits and labels must have the same shape ((None, 1) vs (None, None, None, None)) Keras 深度学习 ValueError: logits 和 label must have the same shape ((None, 2) vs (None, 1)) - Keras Deep Learning ValueError: logits and labels must have the same shape ((None, 2) vs (None, 1)) ValueError:尝试对 IMDB 评论进行分类时,logits 和标签必须具有相同的形状((无,1)与(无,10000)) - ValueError: logits and labels must have the same shape ((None, 1) vs (None, 10000)) when trying to classify IMDB reviews ValueError:logits 和标签必须具有相同的形状 ((None, 124, 124, 3) vs (None, 2)) - ValueError: logits and labels must have the same shape ((None, 124, 124, 3) vs (None, 2)) 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)) Conv2D ValueError:logits 和标签必须具有相同的形状((None,2)与(None,1)) - Conv2D ValueError: logits and labels must have the same shape ((None, 2) vs (None, 1))
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM