当前位置:   article > 正文

处理不等长的数据?_max_tokens的计数方式

max_tokens的计数方式

最近在处理EEG数据,遇到不等长的EEG数据,需要处理成等长的数据。

首先:

先看数据的分布,是否符合正太分布,datas_lengths是数据长度的列表,分别存储每一个样本的数据长度

  1. num_tokens = np.array(data_lengths)
  2. plt.hist(np.log(num_tokens), bins = 100)
  3. plt.xlim((1,10))
  4. plt.ylabel('number of tokens')
  5. plt.xlabel('length of tokens')
  6. plt.title('Distribution of tokens length')
  7. plt.show()

 

显示数据柱状图:

然后:

这里用一个均值+2个标准差,可以覆盖到97%左右的数据。(正态分布的特性)

  1. max_tokens = np.mean(data_lengths) + 2 * np.std(data_lengths)
  2. max_tokens = int(max_tokens)
  3. max_tokens

最后:

使用pad_sequences(keras包提供的函数)截取和补齐数据

(长于max_tokens的数据进行截取,短于max_tokens的数据进行补0)

  1. from tensorflow.python.keras.preprocessing.sequence import pad_sequences
  2. train_pad = pad_sequences(x_data, maxlen=max_tokens,
  3. padding='pre', truncating='pre',dtype=float)

 

 参数说明

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

参考:https://blog.csdn.net/wcy23580/article/details/84957471

       https://keras-cn.readthedocs.io/en/latest/preprocessing/sequence/ 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/489664
推荐阅读
相关标签
  

闽ICP备14008679号