【问题标题】:Not clear about the overall structure of my model不清楚我的模型的整体结构
【发布时间】:2021-01-12 22:16:29
【问题描述】:

我最近开始研究深度神经网络。 我目前正在使用 Kaggle fer2013.csv 数据集创建情绪检测模型。 我的模型正在编译,但是当我尝试训练它时会出现 ValueError 错误 'Shapes (None, 1) and (None, 7) are incompatible'

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:1537 categorical_crossentropy
    return K.categorical_crossentropy(y_true, y_pred, from_logits=from_logits)
/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:4833 categorical_crossentropy
    target.shape.assert_is_compatible_with(output.shape)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/tensor_shape.py:1134 assert_is_compatible_with
    raise ValueError("Shapes %s and %s are incompatible" % (self, other))

ValueError: Shapes (None, 1) and (None, 7) are incompatible

共有7种情绪,其中一种需要检测。 图片尺寸为 48X48。

num_features = 64
num_labels = 7
width,height = 48,48

我用来创建模型的代码

model = Sequential()
# Block 1 of NN
model.add(Conv2D(num_features, kernel_size=3,activation='relu',input_shape = x_train.shape[1:],padding = 'same'))
model.add(Conv2D(num_features, kernel_size=3,activation='relu'))
model.add(MaxPool2D(pool_size = 2, strides = 2))
model.add(BatchNormalization())
model.add(Dropout(0.25))

#BLock 2 of NN
model.add(Conv2D(2*num_features, kernel_size = (3,3),activation = 'relu',))
model.add(Conv2D(2*num_features, kernel_size = (3,3),activation = 'relu',))
model.add(MaxPool2D(pool_size = 2, strides = 2))
model.add(BatchNormalization())
model.add(Dropout(0.25))

#BLock 3 of NN
model.add(Conv2D(4*num_features, kernel_size = (3,3),activation = 'relu',))
model.add(Conv2D(4*num_features, kernel_size = (3,3),activation = 'relu',))
model.add(MaxPool2D(pool_size = 2, strides = 2))
model.add(BatchNormalization())
model.add(Dropout(0.25))

model.add(Flatten())

#FC layers
model.add(Dense(16*num_features,activation = 'relu' ))
model.add(Dropout(0.2))
model.add(Dense(16*num_features,activation = 'relu' ))
model.add(Dropout(0.2))

#Output Layer
model.add(Dense(num_labels,activation = 'softmax'))

MODEL SUMMARY

请帮助我。我被困住了,真的不知道该怎么办。

【问题讨论】:

    标签: python keras deep-learning computer-vision conv-neural-network


    【解决方案1】:

    您需要对因变量 (Y) 进行一次热编码并在必要时重新整形,因为您的输出层是 (None,7)。

    import keras
    import numpy as np
    labels=np.array([[1],[2],[3],[4],[5],[6],[7]]).reshape(-1,1)
    keras.utils.to_categorical(labels)
    

    输出:

    array([[0., 1., 0., 0., 0., 0., 0., 0.],
           [0., 0., 1., 0., 0., 0., 0., 0.],
           [0., 0., 0., 1., 0., 0., 0., 0.],
           [0., 0., 0., 0., 1., 0., 0., 0.],
           [0., 0., 0., 0., 0., 1., 0., 0.],
           [0., 0., 0., 0., 0., 0., 1., 0.],
           [0., 0., 0., 0., 0., 0., 0., 1.]], dtype=float32)
    

    【讨论】:

    • 重塑没有帮助。仍然给出完全相同的错误。
    • 谢谢..错误现已解决。由于我们正在进行多类分类,因此必须对 test_y 和 train_y 进行一次热编码。感谢 yyou 指出。
    猜你喜欢
    • 2014-08-03
    • 2019-11-28
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多