JavaScript变量基础与01_variablen-main解析

需积分: 5 0 下载量 46 浏览量 更新于2024-11-18 收藏 2KB ZIP 举报
资源摘要信息:"在JavaScript中,变量的声明和使用是基础且重要的知识。变量在编程中可以理解为存储信息的容器,而JavaScript中声明变量使用的是关键字 var、let 和 const。它们之间有一些区别和用途上的不同。 首先,var 关键字是最古老的声明变量的方式。它具有函数作用域(function scope)或者全局作用域,这意味着在函数内部声明的变量在函数外部是无法访问的,但是在函数外部声明的变量在函数内部是可以访问的。使用 var 声明的变量存在变量提升(hoisting)现象,即变量可以在声明之前被引用。 其次,let 关键字是ES6(ECMAScript 2015)中引入的,用于声明块作用域(block scope)的局部变量。与 var 不同,let 声明的变量不会被提升到其所在代码块的顶部,所以不能在声明前访问该变量,这有助于减少程序中的错误。let 关键字支持临时死区(temporal dead zone),即在块级作用域内声明一个let变量之前,引用这个变量会抛出错误。 最后,const 关键字同样在ES6中引入,用于声明块作用域的只读常量。一旦声明,常量的值就不能再被修改。与 let 类似,const 也支持临时死区,且声明常量时必须立即初始化。 在实际开发中,推荐优先使用 let 和 const 来声明变量,因为它们提供了更严格的变量作用域控制,有助于编写出更高质量的代码。只有当变量需要重新赋值时,才考虑使用 let,而那些不需要重新赋值的变量,如配置项或常量,则应使用 const 来声明。"

import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt from torch import autograd """ 用神经网络模拟微分方程,f(x)'=f(x),初始条件f(0) = 1 """ class Net(nn.Module): def __init__(self, NL, NN): # NL n个l(线性,全连接)隐藏层, NN 输入数据的维数, # NL是有多少层隐藏层 # NN是每层的神经元数量 super(Net, self).__init__() self.input_layer = nn.Linear(1, NN) self.hidden_layer = nn.Linear(NN,int(NN/2)) ## 原文这里用NN,我这里用的下采样,经过实验验证,“等采样”更优。更多情况有待我实验验证。 self.output_layer = nn.Linear(int(NN/2), 1) def forward(self, x): out = torch.tanh(self.input_layer(x)) out = torch.tanh(self.hidden_layer(out)) out_final = self.output_layer(out) return out_final net=Net(4,20) # 4层 20个 mse_cost_function = torch.nn.MSELoss(reduction='mean') # Mean squared error 均方误差求 optimizer = torch.optim.Adam(net.parameters(),lr=1e-4) # 优化器 def ode_01(x,net): y=net(x) y_x = autograd.grad(y, x,grad_outputs=torch.ones_like(net(x)),create_graph=True)[0] return y-y_x # y-y' = 0 # requires_grad=True).unsqueeze(-1) plt.ion() # 动态图 iterations=200000 for epoch in range(iterations): optimizer.zero_grad() # 梯度归0 ## 求边界条件的损失函数 x_0 = torch.zeros(2000, 1) y_0 = net(x_0) mse_i = mse_cost_function(y_0, torch.ones(2000, 1)) # f(0) - 1 = 0 ## 方程的损失函数 x_in = np.random.uniform(low=0.0, high=2.0, size=(2000, 1)) pt_x_in = autograd.Variable(torch.from_numpy(x_in).float(), requires_grad=True) # x 随机数 pt_y_colection=ode_01(pt_x_in,net) pt_all_zeros= autograd.Variable(torch.from_numpy(np.zeros((2000,1))).float(), requires_grad=False) mse_f=mse_cost_function(pt_y_colection, pt_all_zeros) # y-y' = 0 loss = mse_i + mse_f loss.backward() # 反向传播 optimizer.step() # 优化下一步。This is equivalent to : theta_new = theta_old - alpha * derivative of J w.r.t theta if epoch%1000==0: y = torch.exp(pt_x_in) # y 真实值 y_train0 = net(pt_x_in) # y 预测值 print(epoch, "Traning Loss:", loss.data) print(f'times {epoch} - loss: {loss.item()} - y_0: {y_0}') plt.cla() plt.scatter(pt_x_in.detach().numpy(), y.detach().numpy()) plt.scatter(pt_x_in.detach().numpy(), y_train0.detach().numpy(),c='red') plt.pause(0.1)

2023-02-15 上传