diff --git a/kk.py b/kk.py new file mode 100644 index 0000000..0745be4 --- /dev/null +++ b/kk.py @@ -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}") \ No newline at end of file