Tensorflow的初步学习和总结

学习tensorflow的经验和总结

现在是个人均机器学习的时代,tensorflow更新到2.0更加容易上手,本文从搭建环境到模型构建给出一点示例以供学习

关于搭建环境

如果是初学TF建议使用cpu版本,这样省去诸多麻烦。例如gpu版本需要电脑gpu支持(nividia,需要驱动),并且安装cuDnn和cudatoolkit(需要和tensorflow版本对应),另外python高版本还未适配tensorflow所以不能安装过高版本,此时anaconda闪亮登场,它不仅能虚拟环境让py、包等与系统隔离开,指定python版本和自动下相应cuda搭配。当然如果用cpu版本无需考虑。

import tensorflow as tf
print(tf.__version__) #打印即成功
关于keras和tf.keras

现在都是直接下载tensorflow里面内置了keras,官方也推荐使用后者,相当于后者是将其收纳了,实际上关系是:tensorflow作为其计算工具,后者是tensorflow的高级api,简单来说就是协作关系,keras是只笔,tensorflow是张纸。

初识Tensorflow

前馈神经网络:分为多层, 相邻层之间全连接, 不存在同层连接与跨层连接. 整个网络中无反馈,可用一个有向无环图表示.用标准bp算法训练(基于SDG)。

以下从特性到建立模型和训练。从代码实战开始

  1. 了解其特效和基础–自动求导机制
x = tf.Variable(initial_value=3.)
with tf.GradientTape() as tape:
  y = 3*tf.square(x)
  z = y+3*x
z_grad = tape.gradient(z,x)
print(y,z,z_grad)
#利用其求偏导
X = tf.constant([[1., 2.], [3., 4.]])
y = tf.constant([[1.], [2.]])
w = tf.Variable(initial_value=[[1.], [2.]])
b = tf.Variable(initial_value=1.)
with tf.GradientTape() as tape:
    L = tf.reduce_sum(tf.square(tf.matmul(X, w) + b - y))
w_grad, b_grad = tape.gradient(L, [w, b])        # 计算L(w, b)关于w, b的偏导数
print(L, w_grad, b_grad)

# 线性回归示例:生成data
X_raw = np.array([2013, 2014, 2015, 2016, 2017], dtype=np.float32)
y_raw = np.array([12000, 14000, 15000, 16500, 17500], dtype=np.float32)

X = (X_raw - X_raw.min()) / (X_raw.max() - X_raw.min())
y = (y_raw - y_raw.min()) / (y_raw.max() - y_raw.min())
X = tf.constant(X)
y = tf.constant(y)

a = tf.Variable(initial_value=0.)
b = tf.Variable(initial_value=0.)
variables=[a,b]
num_epoch = 10000
opt = tf.keras.optimizers.SGD(learning_rate=5e-4)
for e in range(num_epoch):
  with tf.GradientTape() as tape:
      y_pred = a * X + b
      loss = tf.reduce_sum(tf.square(y_pred-y))
  grads = tape.gradient(loss,variables)
  opt.apply_gradients(grads_and_vars=zip(grads,variables))
print(a,b)
  1. 创建自己的模型作用如上面的运算和variable(下面的方法都是各类框架通用,没有使用高级api,都是自定义网络)
class MyModel(tf.keras.Model):
    def __init__(self):
        super().__init__()     # Python 2 下使用 super(MyModel, self).__init__()
        # 此处添加初始化代码(包含 call 方法中会用到的层),例如
        # layer1 = tf.keras.layers.BuiltInLayer(...)
        # layer2 = MyCustomLayer(...)

    def call(self, input):
        # 此处添加模型调用的代码(处理输入并返回输出),例如
        # x = layer1(input)
        # output = layer2(x)
        return output

    # 还可以添加自定义的方法
#由于继承自model其有variable这一属性获取所有变量
#将上例的y=ax+b模型化
X = tf.constant([[1.0, 2.0, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值