我在学python的时候在想什么2---让电脑学会加法

本文为原创文章,转载请注明出处。

写文章是 定大纲是一个系列,内容从浅到深,主旨引发读者思考。更新周期一周一更。

废话少说,直接进入主题。

每个人入门机器学习都是简单的线性逻辑回归

 

在学完之后,我一直在想,能不能写一个让电脑学会算加法的神经网络系统。

对于一个神经网络而言,并不是神经层越多,能力越强。一个好的神经网络的特点是模型恰到好处。

以下是我简单构造的的神经网络。

 

数学公式:

 x1*w+b1+ x2*w+b2=y

这样设计的好处是,快速出答案。而且符合 数学原理 1+1 =2

在理论上 只要 w =1 b= 0 就能100%正确得出答案。

如果你不服 ,那就用传统的模型设计吧

下面开始为大家排坑。

#生成模拟数据

train_X = np.random.rand(100)

train_X2 = np.random.rand(100)

train_Y =  train_X2 + train_X 

# 创建模型

# 占位符

 

inputdict = {

    'x': tf.placeholder("float"),

    'x2': tf.placeholder("float"),

    'y': tf.placeholder("float")

}

我这里生成的是小数,目的是便于训练,如果你用 int 会遇到更多坑的。

例子训练的参数只有2个

这里,如何在sess.run添加一个输入呢。

这就得从原理出发。

例子中传递了一个optimizer,

这个optimizer  其实就是一个 方程式。

前面代码里用到了占位符。

类似

x+y=z

那么我们的公式只要套入

x = 1

y= 2

z = 3

就可以训练误差。所以 模型用到什么数据,feed_dict传递什么数据就行。

sess.run(optimizer, feed_dict={inputdict['x']: train_X[i], inputdict['x2']: train_X2[i],inputdict['y']: train_Y[i]})

还有一个新手很容易卡住的就是 如何编写测试函数。

下面是我的测试函数

ret是计算结果。

同样是 sess.run,参数也类似。

到底什么情况下是 训练什么情况下是 测试呢。

我们注意看第一个参数。

训练的时候 传递的是优化器!!!所以需要传递结果。

而测试传递的是前向结构

也就是我们的公式

w1*x1+b1+w2*x2+b2

所以直接传递 x1 x2  他就会帮我们运算出结果

# -*- coding: utf-8 -*-

"""





@author: 花开无痕



"""



import tensorflow as tf

import numpy as np



#生成模拟数据

train_X = np.random.rand(100)

train_X2 = np.random.rand(100)

train_Y =  train_X2 + train_X 











# 创建模型

# 占位符



inputdict = {

    'x': tf.placeholder("float"),

    'x2': tf.placeholder("float"),

    'y': tf.placeholder("float")

}





# 模型参数

W = tf.Variable(tf.random_normal([1]), name="weight")

b = tf.Variable(tf.zeros([1]), name="bias")





W2 = tf.Variable(tf.random_normal([1]), name="weight2")

b2 = tf.Variable(tf.zeros([1]), name="bias2")

# 前向结构

z = tf.multiply(inputdict['x'], W)+ b+tf.multiply(inputdict['x2'], W2)+ b2



#反向优化

cost =tf.reduce_mean( tf.square(inputdict['y'] - z))

learning_rate = 0.01

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) #Gradient descent



# 初始化变量

init = tf.global_variables_initializer()

#参数设置

training_epochs = 200

display_step = 20



# 启动session

with tf.Session() as sess:

    sess.run(init)



    # Fit all training data

    for epoch in range(training_epochs):

        #for (x, y) in zip(train_X, train_Y):

        for i in range(100):

            sess.run(optimizer, feed_dict={inputdict['x']: train_X[i], inputdict['x2']: train_X2[i],inputdict['y']: train_Y[i]})



        #显示训练中的详细信息

        if epoch % display_step == 0:

            loss = sess.run(cost, feed_dict={inputdict['x']: train_X[i],inputdict['x2']: train_X2[i], inputdict['y']:train_Y[i]})

            print ("Epoch:", epoch+1, "cost=", loss,"W=", sess.run(W), "b=", 'w2',sess.run(b),sess.run(W2), "b=", sess.run(b2))



    print (" Finished!")

    print ("W=", sess.run(W), "b=", sess.run(b),"W2=", sess.run(W2), "b2=", sess.run(b2))



    xxx = np.random.rand(100)

    xxx2 = np.random.rand(100)

    for i in range(len(xxx)):

        ret = sess.run(z, feed_dict={inputdict['x']: xxx[i],inputdict['x2']: xxx2[i]})

        print ( 'xxx',xxx[i],'xxx2',xxx2[i],'=',ret,xxx[i]+xxx2[i])







 

 

以下是我编写的源码

### Python 中 `lambda` 表达式的用法 #### 定义与特性 `lambda` 是一种创建匿名函数的方式,它允许在任何需要函数对象的地方使用。由于 `lambda` 是一个表达式而非语句,其可以出现在许多其他地方而不仅仅是赋值操作中[^1]。 #### 基本结构 基本形式如下所示: ```python lambda 参数1, 参数2, ... : 表达式 ``` 这里的关键在于右侧部分必须是一个单一的表达式,该表达式的结果即为整个 `lambda` 函数执行后的返回值。 #### 实际应用案例 ##### 简单调用 下面的例子展示了如何利用 `lambda` 来简化一些常见的编程任务: ```python # 非 lambda 方式实现加法器 def add(x, y): return x + y print(add(5, 3)) # 输出8 # 使用 lambda 的方式实现相同功能 add_lambda = lambda x, y: x + y print(add_lambda(5, 3)) # 同样输出8 ``` ##### 列表排序中的运用 另一个常见用途是在列表或其他可迭代对象上进行自定义排序时作为键(key)参数传递给内置方法如 `sorted()` 或者 `.sort()`. ```python students = [("Alice", 90), ("Bob", 75), ("Charlie", 85)] # 按照成绩降序排列学生名单 sorted_students = sorted(students, key=lambda student: -student[1]) for name, score in sorted_students: print(f"{name}: {score}") ``` 这段代码会按照分数高低对学生元组进行了重新排序,并打印出来。 ##### 结合高阶函数一起工作 还可以将 `lambda` 与其他高级函数(比如 map(), filter(), reduce())结合起来更高效地处理数据集: ```python from functools import reduce numbers = [1, 2, 3, 4] squared_numbers = list(map(lambda n: n ** 2, numbers)) even_numbers = list(filter(lambda n: n % 2 == 0, squared_numbers)) product_of_evens = reduce(lambda acc, curr: acc * curr, even_numbers) print(squared_numbers) # 输出 [1, 4, 9, 16] print(even_numbers) # 输出 [4, 16] print(product_of_evens) # 输出 64 ``` 此片段先计算了每个数字平方之后再筛选出了偶数值最后求得这些偶数乘积。 #### 复杂逻辑下的局限性 尽管 `lambda` 提供了一种简洁的方式来编写小型内联函数,但对于较为复杂的业务逻辑来说可能不够直观易读;此时建议采用常规定义的形式(`def`)来提高代码清晰度和维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值