Tensorflow 中多分类任务的顺序模型的形状问题

问题描述 投票:0回答:0

我正在 PyTorch 中使用 softmax 函数为 36 个类构建一个简单的多类分类器。

#my data
X_train data shape - (155648, 384)
y_train data shape - (155648,)
X_test data shape - (34167, 384)
y_test data shape - (34167,)
# to use 'categorical_crossentropy' on my labels
y_train = tf.keras.utils.to_categorical(y_train, num_classes=36)
y_test = tf.keras.utils.to_categorical(y_test, num_classes=36)

我的模型定义如下:

batch_size = 32
epochs = 50
num_nodes = 64
dropout = 0.1
input_dim = 384
  
model = tf.keras.models.Sequential([  
    tf.keras.layers.Input(shape=(384,)),
    tf.keras.layers.Dense(64, activation='relu', use_bias = False),
    tf.keras.layers.Dropout(dropout),
    tf.keras.layers.Dense(36, activation="softmax", use_bias = False)
                          ])
        
model.summary() 
Model: "sequential_12"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 dense_25 (Dense)            (None, 64)                24576     
                                                                 
 dropout_12 (Dropout)        (None, 64)                0         
                                                                 
 dense_26 (Dense)            (None, 36)                2304      
                                                                 
=================================================================
Total params: 26880 (105.00 KB)
Trainable params: 26880 (105.00 KB)
Non-trainable params: 0 (0.00 Byte) 

我的 Dropout 层获得 0 个参数是不是很糟糕?

接下来我编译模型:

optimizer=tf.keras.optimizers.Adam()
loss = 'categorical_crossentropy'
metrics =['accuracy', tf.keras.metrics.AUC(multi_label = True)]

model.compile(optimizer=optimizer, loss=loss, metrics=metrics)

然后训练时得到这个ValueError:

model.fit(X_train, y_train,
          epochs=epochs,
          validation_data=(X_test, y_test))

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[62], line 1
----> 1 model.fit(X_train, y_train,
      2           epochs=epochs,
      3           validation_data=(X_test, y_test))

File /usr/local/lib/python3.10/site-packages/keras/src/utils/traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs)
     67     filtered_tb = _process_traceback_frames(e.__traceback__)
     68     # To get the full stack trace, call:
     69     # `tf.debugging.disable_traceback_filtering()`
---> 70     raise e.with_traceback(filtered_tb) from None
     71 finally:
     72     del filtered_tb

File /tmp/__autograph_generated_filekny6h0ur.py:15, in outer_factory.<locals>.inner_factory.<locals>.tf__train_function(iterator)
     13 try:
     14     do_return = True
---> 15     retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
     16 except:
     17     do_return = False

ValueError: in user code:

    File "/usr/local/lib/python3.10/site-packages/keras/src/engine/training.py", line 1338, in train_function  *
        return step_function(self, iterator)
    File "/usr/local/lib/python3.10/site-packages/keras/src/engine/training.py", line 1322, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "/usr/local/lib/python3.10/site-packages/keras/src/engine/training.py", line 1303, in run_step  **
        outputs = model.train_step(data)
    File "/usr/local/lib/python3.10/site-packages/keras/src/engine/training.py", line 1081, in train_step
        loss = self.compute_loss(x, y, y_pred, sample_weight)
    File "/usr/local/lib/python3.10/site-packages/keras/src/engine/training.py", line 1139, in compute_loss
        return self.compiled_loss(
    File "/usr/local/lib/python3.10/site-packages/keras/src/engine/compile_utils.py", line 265, in __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    File "/usr/local/lib/python3.10/site-packages/keras/src/losses.py", line 142, in __call__
        losses = call_fn(y_true, y_pred)
    File "/usr/local/lib/python3.10/site-packages/keras/src/losses.py", line 268, in call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    File "/usr/local/lib/python3.10/site-packages/keras/src/losses.py", line 2122, in categorical_crossentropy
        return backend.categorical_crossentropy(
    File "/usr/local/lib/python3.10/site-packages/keras/src/backend.py", line 5560, in categorical_crossentropy
        target.shape.assert_is_compatible_with(output.shape)

    ValueError: Shapes (32, 36, 36) and (32, 36) are incompatible

我不确定我的第一个密集层是否正确?谁能告诉我如何修复这个错误?

python tensorflow keras deep-learning
© www.soinside.com 2019 - 2024. All rights reserved.