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