乐趣区

关于人工智能:文本分类时调试CNN模型遇到的问题

文本分类时调试 CNN 模型遇到的问题

1. 查看 TensorFlow、Keras 的版本

import tensorflow as tf

tf.__version__
# '2.6.0'
import keras

keras.__version__
'2.6.0'

2. 导入 to_categorical() 时呈现谬误

对于如何正确导入 to_categorical 的内容,请参考链接: https://qa.1r1g.com/sf/ask/2904623781/

from tensorflow.keras.utils import to_categorical
'''
将整型的类别标签转为 onehot 编码。y 为 int 数组,num_classes 为标签类别总数,大于 max(y)(标签从 0 开始的)。返回:如果 num_classes=None,返回 len(y) * [max(y)+1](维度,m* n 示意 m 行 n 列矩阵,下同),否则为 len(y) * num_classes。'''
y_train = np.asarray(all_labels)

labels = to_categorical(y_train)

3. 应用 Tokenizer() 生成字典及对应的文本序列,进一步转换为 pad_sequences

from keras.preprocessing.sequence import pad_sequences
'''
sequences:浮点数或整数形成的两层嵌套列表
maxlen:None 或整数,为序列的最大长度。大于此长度的序列将被截短,小于此长度的序列将在前部填 0.
dtype:返回的 numpy array 的数据类型
padding:‘pre’或‘post’,确定当须要补 0 时,在序列的起始还是结尾补 `
truncating:‘pre’或‘post’,确定当须要截断序列时,从起始还是结尾截断
value:浮点数,此值将在填充时代替默认的填充值 0
'''
print(pad_sequences(tokened))

print(pad_sequences(tokened,8))         #固定长度

print(pad_sequences(tokened,8,padding = 'post'))        #在前面补 0

print(pad_sequences(tokened,8,padding = 'post',truncating = 'pre', value = -1))        #截断并将默认填充值 0 改为 -1        #
tokenizer = Tokenizer()

tokenizer.fit_on_texts(all_texts)

sequences = tokenizer.texts_to_sequences(all_texts)

word_index = tokenizer.word_index

print('Found %s unique tokens.' % len(word_index))        #字典的 unique 长度

data = pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH)        #生成句子的二维序列 [[1,2,3],[4,5,6],[7,8,9]]

print(data)

data.shape  #193 行数据,生成序列的最大长度是 100,Tokenizer 的 sequence 转换为 pad_sequence 是为了对立句子中元素的数量相等,也就是每一个行向量的长度是雷同的。data = pad_sequences(sequences, maxlen=MAX_SEQUENCE_LENGTH)        #生成句子的二维序列 [[1,2,3],[4,5,6],[7,8,9]]

print(data)

data.shape  #193 行数据,生成序列的最大长度是 100,Tokenizer 的 sequence 转换为 pad_sequence 是为了对立句子中元素的数量相等,也就是每一个行向量的长度是雷同的。

输入:

退出移动版