tensorflow入门案例

tensorflow入门案例

通过一个例子,讲解tensorflow的运行方式。

tensorflow的运行方式分为4步:

  • 加载数据及定义超参数
  • 构建网络
  • 训练模型
  • 评估模型和进行预测

示例代码如下:

import tensorflow as tf
import numpy as np

"""1、加载数据及定义超参数"""
"""使用模拟数据"""
# np.linspace用于生成等差数列,上述代码表示在[-1,1]之间生成300个数据,形成等差数列关系。
x_data = np.linspace(-1,1,300)
# 将x_data转换为二维数组,newaxis表示在当前位置增加一个维度,在这里也就是增加列
x_data = x_data[:, np.newaxis]
# 加入一些噪声点
noise = np.random.normal(0, 0.05, x_data.shape)
# 根据公式模拟y值
y_true = np.square(x_data)-0.5 + noise

def add_layer(input, in_size, out_size, activation_function=None):
    """
    参数1:输入数据
    参数2:输入数据维度
    参数3:输出数据维度
    参数4:激活函数
    """
    # 构建权重
    w = tf.Variable(tf.random.normal([in_size, out_size]))
    # 构建偏置
    b = tf.Variable(tf.random.normal([1, out_size]) + 0.1)
    # 矩阵相乘
    y_predict = tf.matmul(input, w) + b

    if activation_function is None:
        outputs = y_predict
    else:
        outputs = activation_function(y_predict)
    return outputs


def main():
    # 定义训练数据的占位符
    xs = tf.placeholder(tf.float32, [None, 1])
    ys = tf.placeholder(tf.float32, [None, 1])
	
	"""2、构建网络"""
    # 构建神经网络,输入层、1个隐层、输出层
    # 假设输入层有1个神经元、隐层有20个神经元、输出层有1个神经元
    h1 = add_layer(xs, 1, 20, activation_function=tf.nn.relu)  # 隐层
    prediction = add_layer(h1, 20, 1, activation_function=None)  # 输出层

    # 损失函数
    # reduction_indices[1]:按行求和, reduction_indices[0]:按列求和
    var = tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1])
    loss = tf.reduce_mean(var)

    # 梯度下降
    train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

    """3、训练模型"""
    init = tf.global_variables_initializer()  # 初始化所有变量
    sess = tf.Session()
    sess.run(init)

    for i in range(1000):
        sess.run(train_step, feed_dict={xs: x_data, ys: y_true})
        if i % 50 == 0:
        	"""4、评估模型和进行预测"""
            print("loss:", sess.run(loss, feed_dict={xs: x_data, ys: y_true}))

if __name__ == '__main__':
    main()

运行效果如下:

loss: 110.16617
loss: 0.036757533
loss: 0.0054481984
loss: 0.0035916578
loss: 0.0034978597
loss: 0.0034721652
loss: 0.0034505327
loss: 0.0034306566
loss: 0.0034096679
loss: 0.0033894777
loss: 0.0033684329
loss: 0.0033460592
loss: 0.003322898
loss: 0.0033007755
loss: 0.003278572
loss: 0.0032573033
loss: 0.0032364165
loss: 0.003216444
loss: 0.0031958343
loss: 0.0031740805

我们使用tensorflow框架基本都会有这4个大的步骤,有的网络结构复杂、有的网络结构简单而已,比如R-CNN网络、RPN网络、GoogleNet网络,有些网络结构我们可以直接拿来使用。

模型训练是一个非常耗时的操作,这个和我们定义的网络结构有关,有些业务场景还会涉及到一个网络结构的输出作为另外一个网络结构的输入。

总之,我们会根据我们的业务场景需求去做相应的处理,但是还是会遵循这几个基本步骤。

【拓展:np.newaxis】用于在当前位置增加一个维度,示例代码如下:

import numpy as np

def main():
    test_data = np.array([1, 2, 3, 4, 5])
    test_data2 = test_data[:, np.newaxis]  # n行,1列
    test_data3 = test_data[np.newaxis, :]  # 1列,n行

    print("test_data2:", test_data2)
    print("test_data3:", test_data3)

if __name__ == '__main__':
    main()

运行结果如下:

test_data2: [[1]
 [2]
 [3]
 [4]
 [5]]
test_data3: [[1 2 3 4 5]]
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值