tensorflow.keras 入门 demo

*简介:实践是学习的最佳手段,为了学习tensorflow.keras相关库,这里使用全连接神经网络拟合一段一元二次函数

问题描述:
借助tensorflow.keras相关库,使用全连接神经网络,拟合一段一元二次函数

函数表达式为:y = 3 * (x^2), x的范围为[0,10]。

构建数据集:
构建数据集的函数如下:

def generate_data(phase):
    """
    返回数据集
    :param phase: string
    :return: {'input':[], 'label':[]}
    """

    if phase == 'train':
        x1 = np.linspace(0,10, 400)
        np.random.shuffle(x1)
        X = np.array([[i] for i in x1])
        labels = np.array([[target_fun(x[0])] for x in X])
        train_data = {
            'input': X,
            'label': labels
        }
        return train_data
    elif phase == 'test':
        x1 = np.random.random(10)*10
        x1.sort()
        X = np.array([[i] for i in x1])
        labels = np.array([[target_fun(x[0])] for x in X])
        test_data = {
            'input': X,
            'label': labels
        }
        return test_data


    else:
        print('请输入train或者test')
        
def target_fun(x):
    """
    y = 3 * (x**2)
    :param x: int
    :return:
    """
    return 3 * (x**2)

搭建神经网络:
使用tensorflow.keras搭建神经网络的代码如下:

class DemoNet(object):
    def __init__(self):

        self.model = None
        self.build_net()
    def build_net(self):
        self.model = tf.keras.Sequential()
        # self.model.add(layers.Dense(10, activation='relu'))
        self.model.add(layers.Dense(30, activation='relu'))
        self.model.add(layers.Dense(1, activation=None))

        self.model.compile(optimizer='rmsprop',
                           loss = tf.keras.losses.mse,
                           metrics=['mae'])
    def train(self, data):
        """
        训练神经网络
        :param data:
        :return:
        """
        input = data['input']
        label = data['label']
        print('开始训练...')
        self.model.fit(input, label, epochs = 3000, batch_size=30)
        print('结束训练.')

        print('开始保存数据...')
        self.model.save('trained_model.h5')
        print('保存数据完成.')

    def test_data(self, data):
        """
        测试神经网络
        :return:
        """
        self.load_weights()
        input = data['input']
        label = data['label']
        predicts = self.model.predict(input)

        # 绘图
        X_input = [i[0] for i in input]
        Y_label = [i[0] for i in label]
        Y_predict = [i[0] for i in predicts]
        plt.plot(X_input, Y_label, label='true value')
        plt.plot(X_input, Y_predict, label='predict value', ls='--')
        plt.xlabel('x')
        plt.ylabel('y')
        plt.legend()
        plt.show()

    def load_weights(self):
        self.model = tf.keras.models.load_model('trained_model.h5')

所有源码

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值