我有很多txt文件,所以我按照tensorflow的这个教程做了一个数据集。
https:/www.tensorflow.orgtutorialsload_datatext?hl=es#build_vocabulary
我的程序可以在小型数据库中运行,但是当我使用我的数据库有4956个文本文件时,我的程序在进入标记化和打印部分时就结束了。
RecursionError: maximum recursion depth exceeded while calling a Python object
[Finished in 98.1s with exit code 3221225725]
这是我的代码
import tensorflow as tf
import tensorflow_datasets as tfds
import os
import numpy as np
print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
#---PREPARING THE DATA --------------------------------------------------------------------------------------------
parent_dir=r'C:\Users\ASUS\Desktop\David\Programas\Sequence to tag 1st version\phon_o'
label=0
labeled_data_sets=[]
def labeler(example,index):
return example,tf.cast(index,tf.int64)
for phase in os.listdir(parent_dir):
phase_folder=os.path.join(parent_dir,phase)
if phase == "training":
for lan in os.listdir(phase_folder):
lan_folder=os.path.join(phase_folder,lan)
label=label+1
for cor in os.listdir(lan_folder):
cor_path=os.path.join(lan_folder,cor)
for name in os.listdir(cor_path):
names_path=os.path.join(cor_path,name)
lines_dataset=tf.data.TextLineDataset(names_path)
#here I put the label
labeled_dataset=lines_dataset.map(lambda ex:labeler(ex,label))
labeled_data_sets.append(labeled_dataset)
BUFFER_SIZE=5000
BATCH_SIZE=64
#multiple datasets into one
all_labeled_data = labeled_data_sets[0]
for labeled_dataset in labeled_data_sets[1:]:
all_labeled_data=all_labeled_data.concatenate(labeled_dataset)
print(all_labeled_data)
all_labeled_data.shuffle(BUFFER_SIZE, reshuffle_each_iteration=False)
#Tokenizer---------------------
#print()
#print('tokenizer')
tokenizer=tfds.features.text.Tokenizer()
vocabulary_set=set()
for text_tensor, _ in all_labeled_data:
some_tokens=tokenizer.tokenize(text_tensor.numpy())
vocabulary_set.update(some_tokens)
vocab_size=len(vocabulary_set)
print(vocab_size)
当我用完整的数据库执行时,"vocab size "变量,也就是词汇数据集的len没有被打印出来,我想是标记化的部分出了问题,对于小数据库来说,这个工作很好,我试着用tf.text来做,但是还没有在windows上安装。请帮助我
你可以在你的代码中增加递归深度,包括以下行和尝试。
import sys
sys.setrecursionlimit(1500)
你可以知道递归极限,只要做。
sys.getrecursionlimit()