数据是一切的根本。
一.获取数据
1.我们实质是获取所需信息,再把这些信息转为可以字面表示的数据
2.可以使用爬虫scrapy获取数据,但是更一般的是自家数据库中的数据
3.可以获得公用数据集:http://www.kaggle.com/datasets等网站,也可以自己收集数据
4.人工合成数据:自己创造、扩充数据(添加失真)、数据变换,模型方法...
5.注意:1)数据量尽可能多、利于训练;(2)数据内容尽可能有效,能对预测产生作用(有用的特征);(3)数据尽可能要均匀(分类),即全面
6.注意:无论是数据获取还是处理,都要注意多做备份,有能力每步都要备份,数据的价值难以想象
1 # 一.获取数据:tf.keras.utils.get_file根据url下载数据到指定文件夹, 2 DATAS_URL = "https://storage.googleapis.com/tf-datasets/titanic/train.csv" 3 datas_path = tf.keras.utils.get_file(r"E:\python_work\machine_learning\datas\datas.csv", DATAS_URL) 4 5 # 二.读取数据:把文件中的数据转为dataset类型进行使用,有时要指定标签 6 # 1.读取csv文件 7 # (1)若csv第一行不为列名,则需要给定列名;若csv第一行为列名,则可直接读取, 8 CSV_COLUMNS = ['survived', 'sex', 'age', 'n_siblings_spouses', 'parch', 'fare', 'class', 'deck', 'embark_town', 'alone'] 9 dataset = tf.data.experimental.make_csv_dataset(datas_path, column_names=CSV_COLUMNS, 10 batch_size=1,LABEL_COLUMN = 'survived') 11 12 # 2.读取numpy文件 。.npz 13 # 也是从路径读取,先把文件转为np数组类型,在转换为dataset 14 data = np.load('https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz') 15 train_examples = data['x_train'] 16 train_labels = data['y_train'] 17 train_dataset = tf.data.Dataset.from_tensor_slices((train_examples, train_labels)) 18 19 # 3.将pandas文件中df数据转为data类型 20 csv_file = tf.keras.utils.get_file('heart.csv', 'https://storage.googleapis.com/applied-dl/heart.csv') 21 df = pd.read_csv(csv_file) 22 target = df.pop('target') 23 dataset = tf.data.Dataset.from_tensor_slices((df.values, target.values)) 24 # dataset = tf.data.Dataset.from_tensor_slices((dict(df), target)) 25 26 # 4.读取图片 27 # (1)获得图片 28 import pathlib 29 data_dir = tf.keras.utils.get_file(origin='https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz', 30 fname='flower_photos', untar=True) 31 data_dir = pathlib.Path(data_dir) 32 # # (2)生成图片方法1 33 image_generator = tf.keras.preprocessing.image.ImageDataGenerator(rescale=1./255) #rescale指定将图像张量的数字缩放 34 image_count = len(list(data_dir.glob('*/*.jpg'))) 35 CLASS_NAMES = np.array([item.name for item in data_dir.glob('*') if item.name != "LICENSE.txt"]) 36 train_data_gen = image_generator.flow_from_directory(directory=str(data_dir), 37 batch_size=32, 38 shuffle=True, 39 target_size=(224, 224), 40 classes = list(CLASS_NAMES)) 41 # (3)方法2 (推荐) 42 #######首先将图片进行解码,将图片的标签和图片本身的张量表示提取出来 43 list_ds = tf.data.Dataset.list_files(str(data_dir/'*/*')) #把图片文件转换为数据集 44 def get_label(file_path): #从文件路径中获得标签 45 parts = tf.strings.split(file_path, os.path.sep) 46 return parts[-2] == CLASS_NAMES 47 def decode_img(img): #把图片解码为一个三维张量,并设定张量的大小,和图片的大小 48 img = tf.image.decode_jpeg(img, channels=3) 49 img = tf.image.convert_image_dtype(img, tf.float32) 50 return tf.image.resize(img, [224, 224]) 51 def process_path(file_path): 52 label = get_label(file_path) 53 img = tf.io.read_file(file_path) 54 img = decode_img(img) 55 return img, label 56 ####################### 57 # 其次用map函数 58 AUTOTUNE = tf.data.experimental.AUTOTUNE 59 labeled_ds = list_ds.map(process_path, num_parallel_calls=AUTOTUNE) #设定能自动加载多个图片 60 61 # 5.读取文本:将文本转为字符串,再将字符串转为数字列表,为每个单次映射到唯一的整数