python - 输出层的形状总是 (1,)
问题描述
我正在尝试制作一个简单的 Keras 模型。但无论我指定什么输出形状,输出层始终是该形状(1,)
,因此由于输出层和目标数据形状不匹配,我无法训练我的模型。
import keras
from keras.models import Sequential
from keras.layers import InputLayer, LSTM, Dense
# 63 is the number of unique characters
# 128 is the length of a sequence of characters
X = ... # X is an one-hot ndarray; X.shape == (96092, 128, 63)
Y = ... # Y is an one-hot ndarray; Y.shape == (96092, 63)
model = Sequential()
model.add(InputLayer([128, 63]))
model.add(LSTM(96))
model.add(Dense(63))
model.compile(
optimizer=keras.optimizers.RMSprop(1e-3, decay=1e-5),
loss=keras.losses.sparse_categorical_crossentropy,
)
model.fit(X, Y) # ValueError: Error when checking target: expected dense_4 to have shape (1,) but got array with shape (63,)
如您所见,输出密集层的形状是,(1,)
但它必须是形状(63,)
。我究竟做错了什么?
我正在使用带有预装 Keras 的 Google Colab。
解决方案
该错误的意思是输出层的形状是63。但是,由于某种原因,它期望为1。
在这种情况下,它需要 1 的原因是因为您正在使用sparse_categorical_crossentropy
,它需要一个表示输出类别索引的整数。取而代之的是 use categorical_crossentropy
,它期望输出类别的 one-hot 编码。
推荐阅读
- python - 如何将导出放在 shell 脚本中以包含 oracle 库
- python - Python Unittest - 模拟与补丁
- c++ - 擦除后C ++设置值突然改变?
- pip - 安装pip时如何处理'/usr/bin/python:没有名为pip的模块'?
- javascript - 从 TypeScript 类型定义或 GraphQL 片段定义生成 JavaScript 空对象
- pytorch - 无需暂停 Pytorch 中的主要训练过程即可进行评估
- javascript - 如何超时页面。评估
- javascript - 默认 vscode 主题以外的主题用法
- java - java - 如何在java中正确解析来自对话框流的完整响应?
- typescript - Are RxJS observables different to observables of other languages?