学习报告
TensorFlow的常量
#消除警告 import warnings warnings.filterwarnings("ignore") # 导包 import tensorflow as tf #定义常量 a = tf.constant(value=10,dtype=tf.float32) b = tf.constant(value = 3.14) c = tf.constant(value = [2,4,6]) d = tf.constant(value = np.random.randint(0,20,size = (3,5))) print(a,b,c) ==> Tensor("Const_3:0", shape=(), dtype=float32) Tensor("Const_4:0", shape=(), dtype=float32) Tensor("Const_5:0", shape=(3,), dtype=int32) # 获取tensor对象中的值 sess = tf.Session() #sess.run(fetches, feed_dict=None, options=None, run_metadata=None) # 参数:fetches 获取值 feed_dict 赋值 sess.run(fetches=a) #获取多个值 sess.run(fetches=[a,b,c]) ==>[10.0, 3.14, array([2, 4, 6])] #获取常量的运算结果 sess.run(fetches = a + b) #tf的运算 sess.run(tf.reduce_sum(d,axis = 0)) sess.run(tf.reduce_mean(d,axis = 0)) sess.run(tf.reduce_max(d,axis = 0)) sess.run(tf.reduce_min(d,axis = 0)) sess.run(tf.reduce_prod(d,axis = 0)) #幂运算 sess.run(tf.pow(4.0,0.5)) #乘法 sess.run(tf.multiply(3,5)) #矩阵积 sess.run(tf.matmul(A,B))
TensorFlow的变量
# tf.Variable(*args, **kwargs) # 定义变量 v = tf.Variable(dtype = tf.float32,initial_value = 10) v2 = tf.Variable(dtype = tf.float32,initial_value = np.random.normal(size = [3,3])) # 变量需要进行初始化(初始化一次就好) sess.run(tf.global_variables_initializer()) sess.run(v) ==>10 # 变量,可以改变(使用assion方法) assign = tf.assign(v,20) # 变为实际,运行 sess.run(assign)
占位符placeholder
# 占位符(此时只是构建出A,并没有赋值) # None 数据形状未知,赋值的时候,给定,灵活 A = tf.placeholder(dtype = np.float32,shape = [3,4],name = 'A') B = tf.placeholder(dtype = np.float32,shape = [4,5],name = 'B') C = tf.placeholder(dtype = np.float32,shape = [None,4],name = 'C') D = tf.placeholder(dtype = np.float32,shape = [4,None],name = 'D') # matrix multipy 矩阵积 C = tf.matmul(A,B) #给占位符赋值 sess.run(fetches=C,feed_dict={A:np.random.randint(0,10,size = (3,4)), B:np.random.randint(0,10,size = (4,5))})
卷积
# 算法原型 tf.nn.conv2d(input, filter=None, strides=None, padding=None, use_cudnn_on_gpu=True, data_format='NHWC', dilations=[1, 1, 1, 1], name=None, filters=None) # 参数 ARGS: input:A Tensor。必须是以下类型之一:float32,float64。 filter:A Tensor。必须与input类型相同。 strides:列表ints。1-D长度4.每个尺寸的滑动窗口的步幅input。 padding:string来自:"SAME"(填充0使输出和input维度相同), "VALID(不填充0)"。要使用的填充算法的类型。 use_cudnn_on_gpu:可选bool。默认为True。 name:操作的名称(可选)。
简单使用
import warnings warnings.filterwarnings('ignore') import tensorflow as tf import numpy as np inputs = np.random.randint(0,5,size = (11,11)) # 卷积操作时,需要给一个系数 filters = np.random.randint(-1,2,size = (3,3)) # input [batch, height, width, channels] inputs = inputs.reshape(1,11,11,1).astype(np.float32) # filter = [filter_height, filter_width, in_channels, out_channels] filters = filters.reshape(3,3,1,1).astype(np.float32) conv = tf.nn.conv2d(input = inputs,filter = filters,strides = [1,1,1,1],padding = 'SAME') with tf.Session() as sess: result = sess.run(conv) print(result.reshape(11,11))
课后习题
1.全连接层(fully connected layers,FC)在整个卷积神经网络中起到“分类器”的作用。如果说卷积层、池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的“分布式特征表示”映射到样本标记空间的作用。
局部连接:网络的下一层和上一层之间通过卷积核连接,或者说上一层的数据和卷积核卷积之后得到下一层。在全连接网络中,上一层的每个数据和下一层的每个数据都会有关,局部连接的意思就是说下一层只和上一层的局部数据有关。
2.卷积过程是指用一个大小固定的卷积核按照一定步长扫描输入矩阵进行点阵运算。
3.池化操作能显著降低参数量外,还能够保持对平移、伸缩等操作的不变性。
激活函数它们将非线性特性引入到我们的网络中。其主要目的是将A-NN模型中一个节点的输入信号转换成一个输出信号。该输出信号现在被用作堆叠中下一个层的输入。
4.模仿了生物神经系统的“侧抑制”机制,对局部神经元的活动创建了竞争环境,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
5.每次更新系数只随机抽取一个样本参与计算,因此既可以减少迭代次数,节省计算时间,又可以防止内存溢出,降低了计算开销。

浙公网安备 33010602011771号