文本分类时调试 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 是为了对立句子中元素的数量相等,也就是每一个行向量的长度是雷同的。
输入: