初学机器学习代码(enrollment.py)记录的一些函数的用法~
machinelearning
1.tensorflow中定义了tf.app.flags用于接收从终端传入的命令行参数。“DEFINE_xxx“函数带3个参数,分别是变量名称,默认值,用法描述。
tf.app.flags.DEFINE_string( 'test_dir','results/TRAIN_CNN_3D/test_logs', 'Directory where checkpoints and event logs are written to.')
2.代码中所引用的hdf5文件enrollment-evaluation_sample_dataset.hdf5是用户用于注册语音,生成特定模型的文件。而development_sample_dataset_speaker.hdf5在train_softmax.py用于softmax训练。
3.parameter servers即参数服务器,是一个编程框架,用于方便分布式并行程序的编写,适用于大规模深度学习系统。
4.在主函数中,
tf.logging.set_verbosity(tf.logging.INFO):
将 TensorFlow 日志信息输出到屏幕
tf.Group():
计算图,主要用于构建网络,本身不进行任何实际的计算。
5.
with graph.as_default()
表示将这个类实例graph,也就是新生成的图作为整个 tensorflow 运行环境的默认图,如果有多个线程,由于创建了多个默认图,就相当于有了多个图画纸了。
6.
tf.device()
指定模型运行的具体设备,可以指定运行在GPU还是CUP上,以及哪块GPU上。
7.[Select the network]
使用
nets_factory.get_network_fn()
构建一个网络。(具体见11)
8.[Create a dataset provider that loads data from the dataset]
tf.placeholder(dtype, shape=None, name=None)
作为占位符。
9.
tf.train.batch(
tensors,# 一个列表或字典的tensor用来进行入队
batch_size,# 设置每次从队列中获取出队数据的数量
num_threads=1,# 用来控制入队tensors线程的数量,如果num_threads大于1,则batch操作将是非确定性的,输出的batch可能会乱序
capacity=32,#一个整数,用来设置队列中元素的最大数量
enqueue_many=False,# 在tensors中的tensor是否是单个样本
shapes=None,# 可选,每个样本的shape,默认是tensors的shape
dynamic_pad=False,# Boolean值.允许输入变量的shape,出队后会自动填补维度,来保持与batch内的shapes相同
allow_smaller_final_batch=False,# 可选,Boolean值,如果为True队列中的样本数量小于batch_size时,出队的数量会以最终遗留下来的样本进行出队,如果为Flalse,小于batch_size的样本不会做出队处理
shared_name=None,# 可选,通过设置该参数,可以对多个会话共享队列
name=None
)
功能:利用一个tensor的列表或字典来获取一个batch张量。
10.[specify the losss function]
l2范数用于正则化,表示向量元素的平方和再开平方,L2范数通常会被用来做优化目标函数的正则化项,防止模型为了迎合训练集而过于复杂造成过拟合的情况,从而提高模型的泛化能力。
.
11.[outputs of two networks]
在nets_factory.py文件中,内部函数network_fn(images)被作为返回值输出,
model_speech_fn = nets_factory.get_network_fn(
FLAGS.model_speech,
num_classes=num_subjects_development,
is_training=is_training)
得到model_speech_fn就是network_fn(images),之后传入参数model_speech_fn(batch_speech)返回值就是network_fn()的返回值。
12.
tf.reduce_mean(input_tensor,
axis=None,
keep_dims=False,
name=None,
reduction_indices=None)
用于计算张量tensor沿着指定的数轴(tensor的某一维度)上的平均值,主要用作降维或者计算tensor(图像)的平均值。
tf.nn.softmax_cross_entropy_with_logits(logits,labels,name=None)
第一个参数logits:就是神经网络最后一层的输出,如果有batch的话,它的大小就是[batchsize,num_classes],单样本的话,大小就是num_classes。第二个参数labels:实际的标签,大小同上。这个函数的返回值是一个向量。之后,求loss,则要做一步tf.reduce_mean操作,对向量求均值。
tf.equal(x,y,name=None)
逐个元素进行判断,x,y维度一致,每个元素比对过去,相等则true,否则false,得到相同维度的矩阵。
15.【evaluate the model】
tf.argmax(input,axis)
根据axis取值的不同返回每行或者每列最大值的索引。axis=0时比较每一列的元素,将每一列最大元素所在的索引记录下来,最后输出每一列最大元素所在的索引数组。axis=1的时候,将每一行最大元素所在的索引记录下来,最后返回每一行最大元素所在的索引数组。
tf.cast()
作用是执行 tensorflow 中张量数据类型转换,代码中correct_pred张量是bool类型的,转换成float32类型。再计算平均值即得到accuracy。
17.[summary section]
tf.GraphKeys.SUMMARIES
在关系图中创建的汇总张量对象。
18.
tf.get_collection(
key,
scope=None
)
该函数可以用来获取key集合中的所有元素,返回一个列表。
19.
tf.Session(self, target='', graph=None, config=None)
创建一个新的Tensorflow会话。
20.
tf.summary.scalar(tags, values, collections=None, name=None)
用来显示标量信息;一般在画loss,accuary时会用到这个函数。
21.
tf.nn.zero_fraction(
value,
name=None)
将输入的Tensor中0元素在所有元素中所占的比例计算并返回,因为relu激活函数有时会大面积的将输入参数设为0,所以此函数可以有效衡量relu激活函数的有效性。
将x中的0元素所占比例返回,作为tf.summary.scalar()的value。
22.**[enrollment model] **
tf.train.latest_checkpoint()
函数的作用查找最新保存的checkpoint文件的文件名(Finds the filename of latest saved checkpoint file.)。
23.np.where(condition),返回符合条件的位置信息speaker_index = np.where(fileh.root.label_enrollment[:] == speaker_class)[0],得到符合条件的行索引。
24.最终创建了MODEL.npy文件,其中存储了说话者的模型。