Tensorflow 采用文本分类器神经网络来接受多个类别

Tensorflow 采用文本分类器神经网络来接受多个类别,tensorflow,keras,neural-network,keras-layer,Tensorflow,Keras,Neural Network,Keras Layer,我试图在这个Keras/Tensorflow教程中调整文本分类器神经网络,以输出多个2个以上的类别。我想我可以将输出层更改为使用“softmax”激活,但我不确定如何调整输入层 教程链接: 本教程使用的是电影评论数据,只有两个类别是正片或负片,因此模型仅使用激活设置为“sigmoid”的输出层 我用一个热编码表示了16个类别 教程示例: 我的尝试: 错误: ValueError:形状为5000,1的目标数组被传递为形状为None,16的输出,而使用作为损失二进制_交叉熵。此损失期望目标与输出具

我试图在这个Keras/Tensorflow教程中调整文本分类器神经网络,以输出多个2个以上的类别。我想我可以将输出层更改为使用“softmax”激活,但我不确定如何调整输入层

教程链接:

本教程使用的是电影评论数据,只有两个类别是正片或负片,因此模型仅使用激活设置为“sigmoid”的输出层

我用一个热编码表示了16个类别

教程示例:

我的尝试:

错误: ValueError:形状为5000,1的目标数组被传递为形状为None,16的输出,而使用作为损失二进制_交叉熵。此损失期望目标与输出具有相同的形状

数据形状:

模型摘要: 型号:16

Layer (type)                 Output Shape              Param #   
embedding_15 (Embedding)     (None, None, 16)          160000    
global_average_pooling1d_15  (None, 16)                0         
dense_30 (Dense)             (None, 16)                272       
dense_31 (Dense)             (None, 16)                272
总参数:160544

可培训参数:160544


不可训练参数:0

二进制交叉熵用于二进制分类,但您要查找的是分类交叉熵。二进制交叉熵期望y矩阵是n个样本x1,值为0或1。category_crossentropy期望您的y矩阵是n_样本x n_类别,正确的类别标记为1,其他类别标记为0。听起来你做一个热编码的方式是正确的,所以你可能只需要改变你的损失函数

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
x_train[:5000] (5000, 2000)
y_train[:5000] (5000,16)
x_train[5000:] (1934, 2000)
y_train[5000:] (1934,16)
Layer (type)                 Output Shape              Param #   
embedding_15 (Embedding)     (None, None, 16)          160000    
global_average_pooling1d_15  (None, 16)                0         
dense_30 (Dense)             (None, 16)                272       
dense_31 (Dense)             (None, 16)                272
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])