微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 python 和 keras

如何解决使用 python 和 keras

我正在尝试使用神经元网络进行分类

我的数据如下所示:

句子 类别
第 1 句 0
第二句 1
第三句 2
第四句 3

因此我有 4 个不同的类别。 我将句子和标签分成 2 个不同的列表,并将第一个列表(带有句子)放入分词器中。

编辑:因为有人询问了数据样本。这是 DropBox (data_samples.txt) 的链接和更多说明。 0 = 不需要,1 = 标题,2 = 作者姓名,3 = 页数。句子是 |从标签分开。由于词形还原,有很多特殊字符(如 -->,"),但分词器会跳过这些字符。 内容来自不同的网站,我只在学习的情况下使用它(不是为了钱或出于恶意)

y_train = array(labels) # it has to be numpy array otherwise it will cause errors,labels is a list of integers
x_train = tokenizer.texts_to_sequences(newLines) # newLines is a list with all sentences
x_train = pad_sequences(x_train,maxlen=sequenceLength)
vocabSize = len(tokenizer.word_index) + 1

现在我将训练我的模型

mymodel = Sequential()
mymodel.add(Embedding(input_dim=vocabSize,output_dim=100,input_length=sequenceLength))
mymodel.add(Conv1D(32,3,padding='same',activation='relu'))
mymodel.add(MaxPooling1D())
mymodel.add(Flatten())
mymodel.add(Dense(250,activation='relu'))
mymodel.add(Dense(4,activation='softmax'))
mymodel.compile(optimizer="adam",loss="categorical_crossentropy",metrics=["accuracy"])
history = mymodel.fit(x_train,y_train,epochs=30,batch_size=8)

但是如果我启动程序,我会收到以下错误

  • ValueError:形状(无,1)和(无,4)不兼容

我知道这是因为最后一个 Dense Layer。如果我写 1 而不是 4,我不会收到错误消息。但我认为最后一个密集层需要一个 4 作为参数,因为我有 4 个类别。 我认为最后一个用 1 而不是 4 的密集层是不正确的,因为损失是 0.0000e+00。那看起来不正确xD

我做错了什么?

解决方法

用“sparse_categorical_crossentropy”替换 loss="categorical_crossentropy"。

模型为每个类产生一个值; sparse_ loss 知道如何将 [0-3] 范围内的单个值与这 4 个分值进行比较。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。