Tensorflow2.0版本,神经网络简单示例

废话不多说,直接看效果,效果图是我用工具 ScreenToGif 处理后的结果,实际动作偏慢些。
效果示例在这里插入图片描述]
附上源码及介绍:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#如果想在jupyter跑,请加上%matplotlib atuo

# 记录损失,这里我没用上,有兴趣可以自己输出损失曲线
class History(tf.keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self.losses = []

    # 每epoch一次(即一次feed batch,输出一个loss)
    def on_epoch_end(self, epoch, logs={}):
        self.losses.append(logs.get('loss'))

# 自定义模拟函数,可以自己定制
def function():
    x_data = np.linspace(-1, 1, 300)[:, np.newaxis]
    noise = np.random.normal(0, 0.05, x_data.shape)
    y_data = np.power(x_data, 3) + np.square(x_data) - 0.05 + noise
    return x_data, y_data

# 建立神经模型
def build_model():
    model = tf.keras.Sequential([
        tf.keras.layers.Flatten(input_shape=(1,)),  # 将输入的维度压缩成一个维度
        tf.keras.layers.Dense(30, activation='relu'),   # 1个隐藏层,10个units,激活函数为relu(实现非线性变换是因为relu能把小于0部分消掉,实现矩阵的稀疏性)
        # tf.keras.layers.Dense(10, activation='relu'),  #这里我屏蔽了,有需要可以自己加层数
        tf.keras.layers.Dropout(0.2),   # 随机丢弃0.2,防止过拟合
        tf.keras.layers.Dense(1)
    ])

    optimizer = tf.keras.optimizers.Adam(0.001)  
    model.compile(optimizer=optimizer, loss="mse")

    return model

if __name__ == '__main__':
    x_data, y_data = function()
    # plt.plot(x_data, y_data)
    model = build_model()
    history = History()

    # plot the real data(画出真实图)
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)   # 画子图,(111)一行一列,第一个
    ax.plot(x_data, y_data)
    plt.ion()   # 作用:打开交互模式,默认为阻塞,即plt.show后程序不能运行,则不能跑动态图
    plt.show()

    for i in range(200):
        model.fit(x_data, y_data, batch_size=150, epochs=5, callbacks=[history])

        if i % 2 == 0:
            try:
                # 移除上一条曲线
                ax.lines.remove(lines[0])
            except Exception:
                pass
            y_pred = model.predict(x_data)

            lines = ax.plot(x_data, y_pred)
            plt.pause(1)
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值