# sklearn的train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。
train_x, test_x, train_y, test_y = train_test_split(imgs, labs, test_size=0.05, random_state=random.randint(0, 100))
参数解释:
train_data:被划分的样本特征集
train_target:被划分的样本标签
test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量
random_state:是随机数的种子。
随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。
图片转换为np.array以后,都要进行归一化,除以255
labs = np.array([[0,1] if lab == my_faces_path else [1,0] for lab in labs])
框架下也封装了tf.app.flags.DEFINE_XXXX()函数用于定义参数,便于命令行形式传递参数。常见的函数形式如下:
flags.DEFINE_float(参数1,参数2,参数3)
flags.DEFINE_integer(参数1,参数2,参数3)
flags.DEFINE_string(参数1,参数2,参数3)
flags.DEFINE_boolean(参数1,参数2,参数3)
参数1:定义的参数名称;
参数2:参数默认值;
参数3:对参数的描述;
if __name__ == '__main__':
tf.app.run() # 他会给主函数返回当前文件地址字符串列表
# 如果你的代码中的入口函数不叫main(),而是一个其他名字的函数,如test(),则你应该这样写入口tf.app.run(test)
# 如果你的代码中的入口函数叫main(),则你就可以把入口写成tf.app.run()
tf.pad
pad(
tensor, # 输入数据
paddings,
mode=’CONSTANT’, # 可以有其它选项 REFLECT
name=None
)
paddings , 输入数组(ndarray, tensor, list都行),如四维:
np.array([[0, 0], [3, 3], [3, 3], [0, 0]]) , 每一个[ ] , 表示一个维度,每个数字表示一个方向填充几个0
BatchSize维度不填充,行维度上下填充3行0,列维度左右填充3列0,channel维度不填充
# 中括号list结构,在这之中获取当前文件中文件夹名字,os.listdir()也可已做
unique_labels = [l.strip() for l in tf.gfile.FastGFile(
labels_file, 'r').readlines()]
tf.gfile使用:
1.# 中括号list结构,在这之中获取当前文件中文件夹名字,os.listdir()也可已做,剔除空格: 字符前空格,全部空格,末尾空格:lstrip() , strip() , rstrip()
unique_labels = [l.strip() for l in tf.gfile.FastGFile(labels_file, 'r').readlines()]
2. matching_files = tf.gfile.Glob(jpeg_file_path) # 取出指定路径文件夹中一种花列表,完整相对地址字符串列表,根据参数地址
tf.gfile.FastGFile()
tf.gfile.FastGFile(path,decodestyle)
函数功能:实现对图片的读取。
函数参数:(1)path:图片所在路径 (2)decodestyle:图片的解码方式。(‘r’:UTF-8编码; ‘rb’:非UTF-8编码)
import matplotlib.pyplot as plt
import tensorflow as tf
#tf.gfileGFile()函数:读取图像
image_jpg = tf.gfile.FastGFile('dog.jpg','rb').read()
image_png = tf.gfile.FastGFile('lizard.png','rb').read()
with tf.Session() as sess:
image_jpg = tf.image.decode_jpeg(image_jpg) #图像解码
print(sess.run(image_jpg))#打印解码后的图像(即为一个三维矩阵[w,h,3])
image_jpg = tf.image.convert_image_dtype(image_jpg,dtype=tf.uint8) #改变图像数据类型
image_png = tf.image.decode_png(image_png)
print(sess.run(image_jpg))
image_png = tf.image.convert_image_dtype(image_png,dtype=tf.uint8)
plt.figure(1) #图像显示
plt.imshow(image_jpg.eval())
plt.figure(2)
plt.imshow(image_png.eval())
或者
with tf.gfile.FastGFile(filename, 'rb') as f:
image_data = f.read() # 把文件读取出来,按照bytes格式,二进制方法读取'rb'
tensorflow中协调器 tf.train.Coordinator 和入队线程启动器 tf.train.start_queue_runners
https://blog.youkuaiyun.com/dcrmg/article/details/79780331
代码TFrecord有
QueueRunner类用来启动tensor的入队线程,可以用来启动多个工作线程同时将多个tensor(训练数据)推送入文件名称队列中,具体执行函数是 tf.train.start_queue_runners , 只有调用 tf.train.start_queue_runners 之后,才会真正把tensor推入内存序列中,供计算单元调用,否则会由于内存序列为空,数据流图会处于一直等待状态。
tf.train.batch 的理解: https://blog.youkuaiyun.com/sinat_29957455/article/details/83152823 总之他可以,队列读取,batch出队,自动填充队头;
inputs = (inputs / 255.0) * 2.0 - 1.0 # 读取图像归一化到【-1,1】
拆解和拼接矩阵,tensor!
tensorflow中os.environ[“TF_CPP_MIN_LOG_LEVEL”]的值的含义
介绍
# 避免打印TF调试信息
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'