zoukankan      html  css  js  c++  java
  • 【tensorflow2.0】中阶api--模型、损失函数、优化器、数据管道、特征列等

    下面的范例使用TensorFlow的中阶API实现线性回归模型。

    TensorFlow的中阶API主要包括各种模型层,损失函数,优化器,数据管道,特征列等等。

    import tensorflow as tf
    from tensorflow.keras import layers,losses,metrics,optimizers
     
     
    # 打印时间分割线
    @tf.function
    def printbar():
        ts = tf.timestamp()
        today_ts = ts%(24*60*60)
     
        hour = tf.cast(today_ts//3600+8,tf.int32)%tf.constant(24)
        minite = tf.cast((today_ts%3600)//60,tf.int32)
        second = tf.cast(tf.floor(today_ts%60),tf.int32)
     
        def timeformat(m):
            if tf.strings.length(tf.strings.format("{}",m))==1:
                return(tf.strings.format("0{}",m))
            else:
                return(tf.strings.format("{}",m))
     
        timestring = tf.strings.join([timeformat(hour),timeformat(minite),
                    timeformat(second)],separator = ":")
        tf.print("=========="*8,end = "")
        tf.print(timestring)
     
    # 样本数量
    n = 800
     
    # 生成测试用数据集
    X = tf.random.uniform([n,2],minval=-10,maxval=10) 
    w0 = tf.constant([[2.0],[-1.0]])
    b0 = tf.constant(3.0)
    Y = X@w0 + b0 + tf.random.normal([n,1],mean = 0.0,stddev= 2.0)  # @表示矩阵乘法,增加正态扰动
     
    # 构建输入数据管道
    ds = tf.data.Dataset.from_tensor_slices((X,Y)) 
         .shuffle(buffer_size = 1000).batch(100) 
         .prefetch(tf.data.experimental.AUTOTUNE)  
     
    # 定义优化器
    optimizer = optimizers.SGD(learning_rate=0.001)
     
    linear = layers.Dense(units = 1)
    linear.build(input_shape = (2,)) 
     
    @tf.function
    def train(epoches):
        for epoch in tf.range(1,epoches+1):
            L = tf.constant(0.0) #使用L记录loss值
            for X_batch,Y_batch in ds:
                with tf.GradientTape() as tape:
                    Y_hat = linear(X_batch)
                    loss = losses.mean_squared_error(tf.reshape(Y_hat,[-1]),tf.reshape(Y_batch,[-1]))
                grads = tape.gradient(loss,linear.variables)
                optimizer.apply_gradients(zip(grads,linear.variables))
                L = loss
     
            if(epoch%100==0):
                printbar()
                tf.print("epoch =",epoch,"loss =",L)
                tf.print("w =",linear.kernel)
                tf.print("b =",linear.bias)
                tf.print("")
     
    train(500)

    结果:

    InternalError: 2 root error(s) found.
      (0) Internal:  No unary variant device copy function found for direction: 1 and Variant type_index: tensorflow::data::(anonymous namespace)::DatasetVariantWrapper
         [[{{node while_input_5/_12}}]]
         [[Func/while/body/_1/cond/then/_78/StatefulPartitionedCall/cond/then/_105/input/_133/_96]]
      (1) Internal:  No unary variant device copy function found for direction: 1 and Variant type_index: tensorflow::data::(anonymous namespace)::DatasetVariantWrapper
         [[{{node while_input_5/_12}}]]
    0 successful operations.
    0 derived errors ignored. [Op:__inference_train_302016]
    
    Function call stack:
    train -> train

    这里出现了一个问题,我是在谷歌colab上使用gpu进行运行的,会报这个错误,但当我切换成cpu运行时就不报错了:

    ================================================================================15:34:47
    epoch = 100 loss = 4.7718153
    w = [[2.00853848]
     [-1.00294471]]
    b = [2.51343322]
    
    ================================================================================15:34:49
    epoch = 200 loss = 3.71054626
    w = [[2.01135874]
     [-1.00254476]]
    b = [3.019526]
    
    ================================================================================15:34:51
    epoch = 300 loss = 3.84821081
    w = [[2.01109028]
     [-1.00210166]]
    b = [3.12148571]
    
    ================================================================================15:34:53
    epoch = 400 loss = 3.35442448
    w = [[2.01156759]
     [-1.0024389]]
    b = [3.14201045]
    
    ================================================================================15:34:55
    epoch = 500 loss = 3.98874116
    w = [[2.00852275]
     [-1.00062764]]
    b = [3.14614844]

    参考:

    开源电子书地址:https://lyhue1991.github.io/eat_tensorflow2_in_30_days/

    GitHub 项目地址:https://github.com/lyhue1991/eat_tensorflow2_in_30_days

  • 相关阅读:
    洛谷 P2827 蚯蚓(NOIp 提高组2016)
    洛谷 P2822 组合数问题(NOIp 提高组2016)
    洛谷 P2671 求和
    洛谷 P1119 灾后重建
    电子海图开发第二十二篇 web电子海图 历史航迹的展示(共一百篇)
    电子海图开发第二十一篇 web电子海图 监听图标点击事件(共一百篇)
    电子海图开发第二十篇 web电子海图 在电子海图上加载图标(共一百篇)
    物联网时代存储告急 边缘存储如何缓解存储压力?
    国家超算深圳中心计划2年内提升计算能力至少1000倍;图神经网络的生成式预训练论文解读
    轻量型 GPU 应用首选 京东智联云推出 NVIDIA vGPU 实例
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12673892.html
Copyright © 2011-2022 走看看