首页 > 编程知识 正文

tensorflow版本,再也不想用tensorflow

时间:2023-05-04 03:04:30 阅读:126629 作者:2709

tensorflow2.x的keras内置了7种数据集:

数据集名称数据集说明boston_housing波士顿房价数据cifar1010种不同写真集cifar100100种不同写真集fashion_mnist10种时尚类别写真集imdb电影评论情感分类数据集mnist手写数字写真集rerest 主题分类数据集这些数据的读取都是load_data (但是两种文本数据集imdb和reuters是特殊的,他们的load_data包含过滤参数)。 本文介绍了imdb的load_data参数和使用方法。

imdb.load_data的定义如下:

TF.keras.datasets.IMDB.load _ data (path=' IMDB.npz ',num_words=None,skip_top=0,maxlen=None,

此参数定义的文件的名称。 通常使用默认值

num_words

整数。 定义的是读取大于该词数的单词。 如果单词的字数小于整数,则替换为oov_char中定义的数字。 默认值由2代替。

需要注意的是,词越多,单词列表中的位置就越靠前,也就是说索引越小,所以实际上剩下的单词索引小于这个值。

skip_top

整数。 将读取频率低于此整数的单词。 大于此整数的将被oov_char中定义的数字替换。

麦克莱恩

整数。 评论中单词数小于此数值的将被读取。 例如,如果一个注释包含120个单词,且maxlen=100,则不会读取该注释。

领先优势

整数。 定义了随机洗牌数据时的初始化种子。 和生成随机数的种子一样。

start_char

整数。 每个注释的开始索引都已定义。 默认值为1。

oov_char

整数。 定义了不符合条件的单词的替代值。 不符合筛选条件的单词的所有索引都将被此数字替换。

索引_ from

整数。 读取单词索引大于此值的内容。

**kwargs

配合用途。

使用num_words

以下示例:

fromtensorflow.kerasimportdatasets (x,y ),tx,ty )=datasets.imdb.load_data ) (打印) '所有数据: ',len ) x[0][0:10](x100,y100 ),) tx100,ty100 )=datasets.IMDB.load _ data (num _ words=100 ) print '前

全部数据: 25000第一评论: 218第一评论内容:[1、14、22、16、43、530、973、1622、1385、65]前100词频率336025000第一评论【100

使用skip_top

作为示例,fromtensorflow.kerasimportdatasets (x,y ),) tx,ty )=datasets.imdb.load_data ) (打印) '所有数据: ' load_data ) ) print )、所有数据len(x(0) ) print (第一个评论内容: ),x100) ) 0:10 ) ) x100,y100 ),tx100,t Len(x100[0] ) print ) )最初的注释内容【100】: (,x100[0] ) 0:10 )的结果如下。

全部数据: 25000第一评论: 218第一评论内容: [ 1,14,22,16,43,530,973,1622,1385,65 ]前100个词的频率336025000第一评论【1000】 65 )跳过2、2、2、2、530、973、1622、1385、2 )比较,索引大于100的为小于

maxlen呢

作为示例,fromtensorflow.kerasimportdatasets (x,y ),) tx,ty )=datasets.imdb.load_data ) (打印) '所有数据: '

y100) = datasets.imdb.load_data(maxlen=100)print("长度小于100:",len(x100),' 第一个评论【100】:',len(x100[0]))

结果:

全部数据: 25000 第一个评论: 218长度小于100词频: 5736 第一个评论【100】: 43

可以看出定义了maxlen之后,读入的数据少了。

start_char使用
示例如下: from tensorflow.keras import datasets(x,y),(tx,ty) = datasets.imdb.load_data()print("全部数据:",len(x),' 第一个评论:',len(x[0]))print("第一条评论内容:",x[0][0:10])(x100,y100),(tx100,ty100) = datasets.imdb.load_data(start_char=100)print("起始索引:",len(x100),' 第一个评论【100】:',len(x100[0]))print("第一条评论内容【100】:",x100[0][0:10])

结果如下:

全部数据: 25000 第一个评论: 218第一条评论内容: [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65]起始索引: 25000 第一个评论【100】: 218第一条评论内容【100】: [100, 14, 22, 16, 43, 530, 973, 1622, 1385, 65]

对比可以发现,评论开始的数值被换为100了。

oov_char使用
示例如下; from tensorflow.keras import datasets(x,y),(tx,ty) = datasets.imdb.load_data()print("全部数据:",len(x),' 第一个评论:',len(x[0]))print("第一条评论内容:",x[0][0:10])(x100,y100),(tx100,ty100) = datasets.imdb.load_data(oov_char=100,skip_top=20)print("替换索引=100:",len(x100),' 第一个评论【100】:',len(x100[0]))print("第一条评论内容【100】:",x100[0][0:10])

结果如下:

全部数据: 25000 第一个评论: 218第一条评论内容: [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65]替换索引=100: 25000 第一个评论【100】: 218第一条评论内容【100】: [100, 100, 22, 100, 43, 530, 973, 1622, 1385, 65]

可以发现替换索引是100。起始索引也变为100了。即使定义了start_char也没有作用,这一点一定要注意。

index_from使用
示例代码: from tensorflow.keras import datasets(x,y),(tx,ty) = datasets.imdb.load_data()print("全部数据:",len(x),' 第一个评论:',len(x[0]))print("第一条评论内容:",x[0][0:10])(x100,y100),(tx100,ty100) = datasets.imdb.load_data(index_from=100)print("index_from=100:",len(x100),' 第一个评论【100】:',len(x100[0]))print("第一条评论内容【100】:",x100[0][0:10])

结果:

全部数据: 25000 第一个评论: 218第一条评论内容: [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65]index_from=100: 25000 第一个评论【100】: 218第一条评论内容【100】: [1, 111, 119, 113, 140, 627, 1070, 1719, 1482, 162]

对比可以发现,每个单词都被增加了100-3=97当index_from =100的时候。之所以要减去3是因为默认参数index_from=3,因此不带任何参数的load_data()实际上是在原始的索引上增加了3。

**kwargs使用
兼容使用。 源代码分析

从Github上可以看到此函数的代码:

if 'nb_words' in kwargs: logging.warning('The `nb_words` argument in `load_data` ' 'has been renamed `num_words`.') num_words = kwargs.pop('nb_words') if kwargs: raise TypeError('Unrecognized keyword arguments: ' + str(kwargs)) origin_folder = 'https://storage.googleapis.com/tensorflow/tf-keras-datasets/' path = get_file( path, origin=origin_folder + 'imdb.npz', file_hash= '69664113be75683a8fe16e3ed0ab59fda8886cb3cd7ada244f7d9544e4676b9f') with np.load(path, allow_pickle=True) as f: x_train, labels_train = f['x_train'], f['y_train'] x_test, labels_test = f['x_test'], f['y_test'] rng = np.random.RandomState(seed) indices = np.arange(len(x_train)) rng.shuffle(indices) x_train = x_train[indices] labels_train = labels_train[indices] indices = np.arange(len(x_test)) rng.shuffle(indices) x_test = x_test[indices] labels_test = labels_test[indices] if start_char is not None: x_train = [[start_char] + [w + index_from for w in x] for x in x_train] x_test = [[start_char] + [w + index_from for w in x] for x in x_test] elif index_from: x_train = [[w + index_from for w in x] for x in x_train] x_test = [[w + index_from for w in x] for x in x_test] if maxlen: x_train, labels_train = _remove_long_seq(maxlen, x_train, labels_train) x_test, labels_test = _remove_long_seq(maxlen, x_test, labels_test) if not x_train or not x_test: raise ValueError('After filtering for sequences shorter than maxlen=' + str(maxlen) + ', no sequence was kept. ' 'Increase maxlen.') xs = np.concatenate([x_train, x_test]) labels = np.concatenate([labels_train, labels_test]) if not num_words: num_words = max(max(x) for x in xs) # by convention, use 2 as OOV word # reserve 'index_from' (=3 by default) characters: # 0 (padding), 1 (start), 2 (OOV) if oov_char is not None: xs = [ [w if (skip_top <= w < num_words) else oov_char for w in x] for x in xs ] else: xs = [[w for w in x if skip_top <= w < num_words] for x in xs] idx = len(x_train) x_train, y_train = np.array(xs[:idx]), np.array(labels[:idx]) x_test, y_test = np.array(xs[idx:]), np.array(labels[idx:]) return (x_train, y_train), (x_test, y_test)

seed是用来初始随机数的:

rng = np.random.RandomState(seed)

start_char是额外添加的:

x_train = [[start_char] + [w + index_from for w in x] for x in x_train]

下面这段代码是取得评论的最大词频:

if not num_words: num_words = max(max(x) for x in xs)

这段代码实现了oov_char替换:

if oov_char is not None: xs = [ [w if (skip_top <= w < num_words) else oov_char for w in x] for x in xs ] else: xs = [[w for w in x if skip_top <= w < num_words] for x in xs]

需要注意的是,由于oov_char是全替换索引,也包括start_char。因此在更改oov_char的时候,还要注意start_char也被修改了。这应该是个小bug。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。