python - 不清楚我的模型的整体结构
问题描述
我最近开始研究深度神经网络。我目前正在使用 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'))
请帮我。我被困住了,真的不知道该怎么办。
解决方案
您需要对因变量 (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)
推荐阅读
- spring - 如何从控制器发送 JSON 响应?
- javascript - 在 mongodb 中使用 where
- arrays - 简单的阵列操作 MIPS 组装
- php - 我应该如何在 Laravel 中为新类别创建第三个表
- android - 谷歌放置自动完成不提供一些有效字符串的建议
- wpf - 动画用户控件
- javascript - React 中的 Konva 无限网格
- ruby-on-rails - 更新 Amazon RDS SSL/TLS 证书 - Elastic Beanstalk
- kubernetes - 在 Kubernetes 中命名服务会阻止它启动
- c# - 在 Net Core 3.0 中同时使用 GRPC 通道