首页 > 解决方案 > 不清楚我的模型的整体结构

问题描述

我最近开始研究深度神经网络。我目前正在使用 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'))

模型摘要

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

标签: pythonkerasdeep-learningcomputer-visionconv-neural-network

解决方案


您需要对因变量 (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)

推荐阅读