深度学习笔记

  1.  Tensorflow中一般使用四维tensor表示一个mini_batch的图片,四个维度分别是批大小,像素行数,像素列数,通道数[batch,height,weight,channels],如tensor中的元素可以是任意内置类型,常用的为float32.
  2. Tensorflow

状态操作:Variable Assige AssignAdd

神经网络相关操作:SoftMax Sigmoid ReLU Convtion2D MaxPool

存档操作:Save Restore

队列和同步操作:Enqueue Dequeue MutexAcquire MutexRelease

控制流操作:Merge Switch Enter Leave NextIteratio

  1. tensorflow计算图的状态,就是图中所有参数的组合。Tensorflow以变量Variable来存储参数值,变量可以与tensor一样参与各种运算,区别在于tensor的值在每次计算完立即被丢弃,而变量的值在通过反向传播计算更新后会保留下来,进入到下一轮训练迭代。
  2. Session是驱动Tensorflow系统执行计算交互的入口。对于python来说,计算图可以在Session创建之前完成,并在tf.Session对象初始化时载入到后端执行引擎,触发计算图执行通过Run接口,也就是tf.Session.run()方法,通过这个接口我们可以将数据代入模型进行执行,并得到执行结果,训练过程由客户端的循环来控制。Session管理了运行时的一系列资源的申请和分配,并且在计算完成后必须要关闭Session以释放资源。
  3. Tensorflow系统架构:client->master->worker架构的分布式系统。客户端通过tf.Seeeion接口与master进行通信,并向master提交触发执行的请求,master将执行任务分配到一个或多个worker进程上,执行的结果通过master返回客户端,worker是最终负责执行计算的角色,会控制计算机的硬件设备资源。   
  4.  Cuda toolkit和cudnn库以启用gpu加速环境,cuda包括了cuda驱动以及使用cuda程序必须使用的编译器和头文件,还有一些辅助函数库。Cudnn是基于cuda toolkit编写的专门面向深度神经网络的gpu加速库.还提供了一些基于神经网络常用的计算,卷积,池化,激活等,tensorflow直接使用这些库函数来实现各种计算的gpu加速。
  5.  Pandas内置了多种解析器,可以直接处理csv pickle json等常用的数据文件格式,甚至可以从MYSQL数据库或者操作系统的剪切板中读入数据,读入的数据为一个DataFrame类型的对象,可以改变该数据类型的维度 长度 类型等
  6. Scikit_learn库中提供了用于切分数据集的工具函数train_test_split(),随机打乱顺序后按比例拆分数据集
  7. 逻辑回归的预测问题公式:y‘ = softmax(xW+b),其中x是输入向量,大小为d*1的列向量,d是特征数,W是c*d的权重矩阵,c是分类类别数目,b是偏置向量,为c*1的列向量。Softmax是一种归一化指数函数。将向量中的元素转换为(0,1)的区间,softmax常用于输出层,用于指定唯一的分类输出。
  8. W和b是模型中的参数,需要通过训练来求得的部分。
  9. 使用placeholder声明输入数据的占位符,tensorflow有数据feed机制,在后面真正计算是,用数据替换占位符。
  10. 占位符placeholder需要给定三个参数,分别是输入数据的元素类型dtype,维度形状shape占位符名称标识name,维度形状使用数组指定,shape不指定默认为None,表示任意形状,一般将第一个维度作为mini_batch的维度,从第二个维度开始才是特征维度,占位符名称name用于区分计算图里的各个节点,默认也为None,系统会自动将节点设置为类似placeholder:0这样的名称
  11. 声明参数变量w,b。tensorflow使用变量Variable来存储和更新这些参数的值。变量声明方式是直接定义tf.Varisble()对象,初始化变量对象有两种方式,一种是从protocol buffer结构VariableDef中反序列化,另一种是通过参数指定初始值。初始值必须是一个tensor对象,或者可以通过convert_to_tensor()方法转换成tensor的python对象,tensorflow提供了多种构造随机tensor的方法,定义变量会保留初始值的维度形状。
  12. 构造前向传播计算图,前向传播就是网络正向计算,由输入计算出标签的过程,其中tf.matmul()是矩阵乘法算子,tf.nn.softmax()是softmax函数,在计算图的构建过程中,tensorflow会自动推算每一个节点的输入输出形状。
  13. 声明代价函数,机器学习算法的优化需要靠代价函数来评估优化方向,二分类问题一般使用交叉熵作为代价函数。(真实值与预测值之间的差异)
  14. 计算交叉熵的时候,模型输出值y_pred应该先加上一个很小的误差值,因为y_pred会非常接近0或1,无法计算log(0),进一步无法计算梯度。解决这个问题的三个办法:1、计算log()时加上一个很小的误差值,如1e-10

2、使用clip()函数限定y_pred的范围

3、当输出非法出现nan时,显式的将cost设置为0

17、加入优化算法,tensorflow内置了很多优化算法,随机梯度下降法(SGD)动量算法(Momentum)Adagrede算法ADAM算法RMSProp算法 在线学习算法FTRL,优化器会自动构建梯度计算和反向传播部分的计算图,一般对于优化算法最关键的是学习率。

18、关闭Session的方法1、Session.close()方法来关闭2、Session重载了__enter__()和__exit__()两个方法,可以使用with语句退出作用域时自动关闭对象。

18、Session启动后就正式进入了训练过程,首先使用tf.global_variables_initializer().run()方法初始化所有变量,接下来就是用一个循环将训练数据反复代入计算图执行迭代,在循环内,Session.run()是触发后端执行的入口。

19、Session.run()有两个关键的参数fetches和feed_dict.其中fetches指定需要被计算的节点,可以用数组同时指定多个节点,节点可以是算子op也可以是tensor。计算所需要的数据是由feed_dict代入,feed_dict需要传入一个字典,字典的key是输入占位符placeholder,value是真实的输入数据。Session.run()执行完计算后,会返回计算节点的结果,若节点为算子,则没有返回值,若节点是tensor则返回当前的值。

20、
代码:import pandas as pd

from sklearn.model_selection import train_test_split

import tensorflow as tf

import numpy as np

mini_batch = 32

#从csv文件中读入数据,读入的数据是一个DataFrame类型的对象

data = pd.read_csv('train.csv')

#查看读入的数据

print(data.info)

#取部分特征字段用于分类,并将所有缺失的字段填充为0

#DataFrame中的apply方法就是将函数应用到由列或行形成的一维数组上

data['Sex'] = data['Sex'].apply(lambda s:1 if s == 'male' else 0)



data = data.fillna(0)

dataset_X = data[['Sex','Age','Pclass','SibSp','Parch','Fare']]

dataset_X = dataset_X.values

print('dataset_X',dataset_X)

#两种分类分别是幸存和死亡,Survived字段是其中一种分类的标签

#新增Deceased字段表示第二种分类的标签,取值为Survived字段取非

#Survivede为1时,Deceased取非,两者组成二分类的one_hot[0,1][1,0]标签

data['Deceased'] = data['Survived'].apply(lambda s : int(not s))

# print('data',data['Deceased'])

dataset_Y = data[['Deceased','Survived']]

dataset_Y = dataset_Y.values

print('dataset_Y',dataset_Y)



#使用sklearn的train_test_split函数将标记数据切分为训练集和测试集

#将全部标记数据随机洗牌后切分,其中验证数据占20%由test_size参数指定

'''

train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取train_data和test_data,形式为:

X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.4, random_state=0)



cross_validatio为交叉验证



参数解释:

train_data:所要划分的样本特征集

train_target:所要划分的样本标签

test_size:样本占比,如果是整数的话就是样本的数量

random_state:是随机数的种子。

随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。

比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。



'''

X_train,X_test,y_train,y_test = train_test_split(dataset_X,dataset_Y,test_size=0.2,random_state=42)



#声明输入数据占位符,6个特征字段,标记字段由两个字段组成

#shape参数的第一个元素为None,表示可以同时放入任意条记录

X = tf.placeholder(tf.float32,shape=[None,6])

y = tf.placeholder(tf.float32,shape=[None,2])

#声明变量

w = tf.Variable(tf.random_normal([6,2]),name = 'weights')

b = tf.Variable(tf.zeros([2]),name= 'bias')

#构造前向传播计算图

y_pred = tf.nn.softmax(tf.matmul(X,w)+b)

#使用交叉熵作为代价函数

cross_entropy = - tf.reduce_sum(y*tf.log(y_pred+ 1e-10),reduction_indices=1)

#批量样本的代价值为所有样本交叉熵的平均值

cost = tf.reduce_mean(cross_entropy)

#使用随机梯度下降法优化器来最小化代价,系统自动构建反向传播部分的计算图

train_op = tf.train.GradientDescentOptimizer(0.001).minimize(cost)



with tf.Session() as sess:

    #初始化所有变量,必须最先执行

    tf.global_variables_initializer().run()

    #训练迭代,迭代10轮

    for epoch in range(10):

        total_loss = 0

        for i in range(len(X_train)):

            feed = {X:[X_train[i]],y:[y_train[i]]}

            #通过session.run接口触发执行

            _,loss = sess.run([train_op,cost],feed_dict=feed)

            # print(loss,loss.type)

            total_loss += loss

        print('epoch:%04d,total_loss=%.9f'%(epoch+1,total_loss))

    print('train complete')

    #评估校验数据集上的准确率

    print(X_test.shape,y_test.shape)

    pred = sess.run([y_pred],feed_dict=
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值