上传文件至 /
This commit is contained in:
137
kk.py
Normal file
137
kk.py
Normal file
@@ -0,0 +1,137 @@
|
||||
|
||||
# ====================== 1.1 函数的定义与直观理解 ======================
|
||||
print("===== 1.1 函数的定义与直观理解 =====")
|
||||
|
||||
# 1. 单变量函数(PPT里的例子)
|
||||
def f1(x):
|
||||
"""y = 2x + 1"""
|
||||
return 2 * x + 1
|
||||
|
||||
def f2(x):
|
||||
"""y = x²"""
|
||||
return x ** 2
|
||||
|
||||
def f3(x):
|
||||
"""y = sin(x)"""
|
||||
import math
|
||||
return math.sin(x)
|
||||
|
||||
# 测试单变量函数
|
||||
x_test = 3
|
||||
print(f"输入x={x_test}")
|
||||
print(f"y = 2x + 1 → 输出:{f1(x_test)}")
|
||||
print(f"y = x² → 输出:{f2(x_test)}")
|
||||
print(f"y = sin(x) → 输出:{f3(x_test):.4f}\n")
|
||||
|
||||
|
||||
# 2. 多元函数(PPT里的例子)
|
||||
def multi_func(x, y):
|
||||
"""z = x + 2y"""
|
||||
return x + 2 * y
|
||||
|
||||
# 测试多元函数
|
||||
x = 3
|
||||
y = 5
|
||||
z = multi_func(x, y)
|
||||
print(f"===== 多元函数示例 =====")
|
||||
print(f"输入x={x}, y={y}")
|
||||
print(f"z = x + 2y → 输出:{z}\n")
|
||||
|
||||
|
||||
# 模拟神经网络的多输入多输出(比如MNIST分类的简化版)
|
||||
def nn_multi_output(x_list):
|
||||
"""
|
||||
简化版多输出函数,模拟MNIST 784输入→10输出
|
||||
x_list: 长度为784的输入列表
|
||||
return: 长度为10的输出列表(每个数字的概率,这里用随机数模拟)
|
||||
"""
|
||||
import random
|
||||
# 这里用简单的线性变换模拟,实际是复杂的神经网络
|
||||
outputs = []
|
||||
for i in range(10):
|
||||
# 简化:用输入的和加一个随机偏移模拟输出
|
||||
out = sum(x_list) * 0.01 + random.uniform(-0.5, 0.5)
|
||||
outputs.append(out)
|
||||
return outputs
|
||||
|
||||
# 测试多输入多输出(用随机生成的784个输入)
|
||||
import random
|
||||
input_data = [random.uniform(0, 1) for _ in range(784)]
|
||||
nn_output = nn_multi_output(input_data)
|
||||
print(f"===== 神经网络多输入多输出模拟 =====")
|
||||
print(f"输入维度:{len(input_data)}")
|
||||
print(f"输出维度:{len(nn_output)}")
|
||||
print(f"前3个输出值:{nn_output[:3]}\n")
|
||||
|
||||
|
||||
# ====================== 1.2 导数(变化的度量) ======================
|
||||
print("===== 1.2 导数(变化的度量) =====")
|
||||
|
||||
def numerical_derivative(f, x, h=1e-5):
|
||||
"""
|
||||
用定义式计算函数f在x处的导数:
|
||||
f'(x) = lim(h→0) [f(x+h) - f(x)] / h
|
||||
"""
|
||||
return (f(x + h) - f(x)) / h
|
||||
|
||||
# 测试:计算几个函数的导数
|
||||
import math
|
||||
|
||||
# 1. 常数函数 f(x) = 5,导数应为0
|
||||
def const_func(x):
|
||||
return 5
|
||||
|
||||
# 2. 线性函数 f(x) = 2x + 1,导数应为2
|
||||
def linear_func(x):
|
||||
return 2 * x + 1
|
||||
|
||||
# 3. 平方函数 f(x) = x²,导数应为2x
|
||||
def square_func(x):
|
||||
return x ** 2
|
||||
|
||||
# 4. sin函数 f(x) = sin(x),导数应为cos(x)
|
||||
def sin_func(x):
|
||||
return math.sin(x)
|
||||
|
||||
x0 = 1 # 测试点
|
||||
print(f"在x={x0}处的数值导数:")
|
||||
print(f"常数函数f(x)=5 → {numerical_derivative(const_func, x0):.4f}")
|
||||
print(f"线性函数f(x)=2x+1 → {numerical_derivative(linear_func, x0):.4f}")
|
||||
print(f"平方函数f(x)=x² → {numerical_derivative(square_func, x0):.4f}(理论值:{2*x0})")
|
||||
print(f"sin函数f(x)=sin(x) → {numerical_derivative(sin_func, x0):.4f}(理论值:{math.cos(x0):.4f})\n")
|
||||
|
||||
|
||||
# ====================== 补充:简单的MLP(和PPT里的公式对应) ======================
|
||||
print("===== 补充:简单MLP的前向计算(和PPT公式对应) =====")
|
||||
|
||||
def relu(x):
|
||||
"""ReLU激活函数"""
|
||||
return max(0, x)
|
||||
|
||||
def simple_mlp(x, W1, b1, W2, b2):
|
||||
"""
|
||||
对应PPT里的公式:y = ReLU(W2 * ReLU(W1 * x + b1) + b2)
|
||||
x: 输入向量
|
||||
W1: 第一层权重
|
||||
b1: 第一层偏置
|
||||
W2: 第二层权重
|
||||
b2: 第二层偏置
|
||||
"""
|
||||
# 第一层
|
||||
hidden = relu(W1 * x + b1)
|
||||
# 第二层
|
||||
output = relu(W2 * hidden + b2)
|
||||
return output
|
||||
|
||||
# 测试这个简单MLP
|
||||
W1 = 2
|
||||
b1 = 1
|
||||
W2 = 3
|
||||
b2 = -1
|
||||
x = 0.5
|
||||
y = simple_mlp(x, W1, b1, W2, b2)
|
||||
print(f"输入x={x}")
|
||||
print(f"MLP输出:{y}")
|
||||
print(f"计算过程:")
|
||||
print(f"第一层:ReLU({W1}*{x} + {b1}) = ReLU({W1*x + b1}) = {relu(W1*x + b1)}")
|
||||
print(f"第二层:ReLU({W2}*{relu(W1*x + b1)} + {b2}) = ReLU({W2*relu(W1*x + b1) + b2}) = {y}")
|
||||
Reference in New Issue
Block a user