tensorflow layers

0. 基础神经网络
    1 数据的呈现(Variable():定义变量):
         x=np.array([[1,1,1],[1,-8,1],[1,1,1]])
        w=tf.Variable(initial_value=x)
        w=tf.Variable(tf.zeros([3,3]))
        init=tf.global_variables_initializer()

    2 数据的加减运算(add():加;multiply():乘):
        a=tf.placeholder(tf.int16)
        b=tf.placeholder(tf.int16)
        add=tf.add(a,b)
        mul=tf.multiply(a,b)

    3 矩阵相乘(matmul)运算:
        a=tf.Variable(tf.ones([3,3]))
        b=tf.Variable(tf.ones([3,3]))
        product=tf.matmul(tf.multiply(5.0,a),tf.multiply(4.0,b))

    4 argmax的练习:获取最大值的下标向量
        a=tf.get_variable(name='a',shape=[3,4],dtype=tf.float32,initializer=tf.random_uniform_initializer(minval=-1,maxval=1))
        # 最大值所在的下标向量
        b=tf.argmax(input=a,axis=0)
        c=tf.argmax(input=a,dimension=1)

    5 创建全一/全零矩阵:
        tf.ones(shape,type=tf.float32,name=None)
        tf.ones([2, 3], int32) ==> [[1, 1, 1], [1, 1, 1]]
        tf.zeros(shape,type=tf.float32,name=None)
        tf.zeros([2, 3], int32) ==> [[0, 0, 0],[0, 0, 0]]

    6 tf.ones_like(tensor,dype=None,name=None)
        #新建一个与给定的tensor类型大小一致的tensor,其所有元素为1。
        # 'tensor' is [[1, 2, 3], [4, 5, 6]] 
        tf.ones_like(tensor) ==> [[1, 1, 1], [1, 1, 1]]

    7 tf.zeros_like(tensor,dype=None,name=None)
        #新建一个与给定的tensor类型大小一致的tensor,其所有元素为0。
        # 'tensor' is [[1, 2, 3], [4, 5, 6]] 
        tf.ones_like(tensor) ==> [[0, 0, 0],[0, 0, 0]]

    8 tf.fill(dim,value,name=None)
        #创建一个形状大小为dim的tensor,其初始值为value
        # Output tensor has shape [2, 3]. 
        fill([2, 3], 9) ==> [[9, 9, 9] [9, 9, 9]]

    9 tf.constant(value,dtype=None,shape=None,name='Const')
        #创建一个常量tensor,先给出value,可以设定其shape
        # Constant 1-D Tensor populated with value list. 
        tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 67] 
         # Constant 2-D tensor populated with scalarvalue -1. 
        tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1.-1. -1.]

    10 tf.linspace(start,stop,num,name=None)
        #返回一个tensor,该tensor中的数值在start到stop区间之间取等差数列(包含start和stop),如果num>1则差值为(stop-start)/(num-1),以保证最后一个元素的值为stop。
        #其中,start和stop必须为tf.float32或tf.float64。num的类型为int。
        tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.011.0 12.0]

    11 tf.range(start,limit=None,delta=1,name='range')
        返回一个tensor等差数列,该tensor中的数值在start到limit之间,不包括limit,delta是等差数列的差值。
        start,limit和delta都是int32类型。
        # 'start' is 3 
        # 'limit' is 18 
        # 'delta' is 3
        tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15] 

    12 变量初始化,随机填充
        12-1 tf.random_normal(shape,mean=0.0,stddev=1.0,dtype=tf.float32,seed=None,name=None)
            # 返回一个tensor其中的元素的值服从正态分布。
        12-2 tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32,seed=None, name=None)
            # 返回一个tensor其中的元素服从截断正态分布
        12-3 tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)
            # 返回一个形状为shape的tensor,其中的元素服从minval和maxval之间的均匀分布。

    13 使用flags定义命令行参数
        tf.app.flags.DEFINE_string('str_name', 'def_v_1',"descrip1")
        tf.app.flags.DEFINE_integer('int_name', 10,"descript2")
        tf.app.flags.DEFINE_boolean('bool_name', False, "descript3")
        FLAGS = tf.app.flags.FLAGS

        FLAGS命令是指编写一个脚本文件,在执行这个脚本时添加相应的参数;
            python tt.py --str_name test_str--int_name 99 --bool_name True

1.卷积神经网络
    Input Layer


    示例:
        #cnn mnist
        cnn_mnist.py
            #输入训练信息
            def cnn_model_fn(features, labels, mode):
              """Model function for CNN."""
              # Input Layer
              #reshape输入信息
              input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])

              # Convolutional Layer #1
              #cnn layer
              conv1 = tf.layers.conv2d(
                  inputs=input_layer,
                  filters=32,
                  kernel_size=[5, 5],
                  padding="same",
                  activation=tf.nn.relu)

              # Pooling Layer #1
              pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)

              # Convolutional Layer #2 and Pooling Layer #2
              conv2 = tf.layers.conv2d(
                  inputs=pool1,
                  filters=64,
                  kernel_size=[5, 5],
                  padding="same",
                  activation=tf.nn.relu)
              pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)

              # Dense Layer
              #dense layer
              pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 64])
              dense = tf.layers.dense(inputs=pool2_flat, units=1024, activation=tf.nn.relu)
              dropout = tf.layers.dropout(
                  inputs=dense, rate=0.4, training=mode == tf.estimator.ModeKeys.TRAIN)

              # Logits Layer
              logits = tf.layers.dense(inputs=dropout, units=10)

              predictions = {
                  # Generate predictions (for PREDICT and EVAL mode)
                  "classes": tf.argmax(input=logits, axis=1),
                  # Add `softmax_tensor` to the graph. It is used for PREDICT and by the
                  # `logging_hook`.
                  "probabilities": tf.nn.softmax(logits, name="softmax_tensor")
              }

              if mode == tf.estimator.ModeKeys.PREDICT:
                return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)

              # Calculate Loss (for both TRAIN and EVAL modes)
              #损失函数 输入1:网络的输出 输入2:label的placeholder 或者是变量
              loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)

              # Configure the Training Op (for TRAIN mode)
              if mode == tf.estimator.ModeKeys.TRAIN:
                optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
                #将 loss 输入优化器中
                train_op = optimizer.minimize(
                    loss=loss,
                    global_step=tf.train.get_global_step())
                return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)

              # Add evaluation metrics (for EVAL mode)
              eval_metric_ops = {
                  "accuracy": tf.metrics.accuracy(
                      labels=labels, predictions=predictions["classes"])}
              return tf.estimator.EstimatorSpec(
                  mode=mode, loss=loss, eval_metric_ops=eval_metric_ops)

2. 循环神经网络

    1 tensorflow中的BasicLSTMCell()是完全按照这个结构进行设计的--基础LSTM
        cell =tf.nn.rnn_cell.BasicLSTMCell(num_units, forget_bias=1.0, input_size=None,state_is_tupe=Flase, activation=tanh)
            #num_units:图一中ht的维数,如果num_units=10,那么ht就是10维行向量
            #forget_bias:还不清楚这个是干嘛的
            #input_size:[batch_size,max_time, size]。假设要输入一句话,这句话的长度是不固定的,max_time就代表最长的那句话是多长,size表示你打算用多长的向量代表一个word,即embedding_size(embedding_size和size的值不一定要一样)
            #state_is_tuple:true的话,返回的状态是一个tuple:(c=array([[]]), h=array([[]]):其中c代表Ct的最后时间的输出,h代表Ht最后时间的输出,h是等于最后一个时间的output的

    2 多层LSTM
        lstm_cell = tf.nn.rnn_cell.MultiRNNCells(cells,state_is_tuple=False)
            #cells:一个cell列表,将列表中的cell一个个堆叠起来,如果使用cells=[cell]*4的话,就是四曾,每层cell输入输出结构相同
            #如果state_is_tuple:则返回的是 n-tuple,其中n=len(cells): tuple:(c=[batch_size, num_units],h=[batch_size,num_units])

        tf.nn.dynamic_rnn(cell, inputs,sequence_length=None, initial_state=None,dtype=None,time_major=False)
            #此函数会通过,inputs中的max_time将网络按时间展开
            #cell:将上面的lstm_cell传入就可以
            #inputs:[batch_size,max_time, size]如果time_major=Flase. [max_time,batch_size, size]如果time_major=True
            #sequence_length:是一个list,如果你要输入三句话,且三句话的长度分别是5,10,25,那么sequence_length=[5,10,25]
            #返回:(outputs, states):output,[batch_size, max_time, num_units]如果time_major=False。 [max_time,batch_size,num_units]如果time_major=True。states:[batch_size, 2*len(cells)]或[batch_size,s]

    3 基础GRU网络
        cell = tf.nn.rnn_cell.GRUCell(num_units, input_size=None, activation=tanh)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值