一,等高线理解

  1. 如果一个变量 w
    J(w)=1m∑i(wxi−yi)2J(w) =\frac{1}{m}\sum_i(wx_i -y_i)^2 J(w)=m1​i∑​(wxi​−yi​)2

    2/ 如果有两个变量 w与b
    J(w,b)=1m∑i(wxi+b−yi)2J(w, b) =\frac{1}{m}\sum_i(wx_i+b -y_i)^2 J(w,b)=m1​i∑​(wxi​+b−yi​)2
  2. 等高线就是把上面这个三维图片映射到二维平面上

二,用程序画出下面这个函数的损失函数的等高线

K是神经网络一个神经元的权重W
b是一个神经元的偏移值

Y=kx+b

y 期望值
损失函数
Loss=1m(Y−y)2Loss =\frac{1}{m} (Y - y)^2 Loss=m1​(Y−y)2

图片

import math
import random
import numpy as np
import matplotlib.pyplot as pltx_train = np.array([0,   1,   2,   3,   4,   5])
y_train = np.array([1.1, 2.2,  3.8, 4.1, 4.9, 5.2])dense = 200
k = np.linspace(0,2,dense)
b = np.linspace(-2,4,dense)# y = kx+b
def get_loss_value(k,b):return np.square(k*x_train+b - y_train).sum()/len(x_train)def draw_contour_line(dense,isoheight): #dense表示取值的密度,isoheight表示等高线的值list_k = []list_b = []list_loss = []for i in range(dense):for j in range(dense):loss = get_loss_value(k[i],b[j])if 1.05*isoheight>loss>0.95*isoheight:list_k.append(k[i])list_b.append(b[j])else:passplt.scatter(list_k,list_b,s=1) #s=0.25比较合适draw_contour_line(dense,0.2)
draw_contour_line(dense,0.5)
draw_contour_line(dense,0.7)
draw_contour_line(dense,1)
draw_contour_line(dense,3)
draw_contour_line(dense,8)
draw_contour_line(dense,10)
draw_contour_line(dense,15)
draw_contour_line(dense,20)
plt.title('Loss Func Contour Line')
plt.xlabel('k')
plt.ylabel('b')
plt.axis([0,2,-2,4])
plt.show()

图1是没有标准化输入X的等高线图
图2是标准化输入X的等高线图
可以看到标准化等高线图像是放正了的椭圆
Y=kx+b

import math
import random
import numpy as np
import matplotlib.pyplot as pltdef tanh(x):return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))def sigmoid(x):return 1/(1+np.exp(-x))def relu(x):return np.maximum(x, 0)def transfor_stardard(x):x_mean = np.mean(x)x_var = np.var(x, axis=0)return (x - x_mean) / x_varx_train = np.array([0,   1,     2,   3,   4,   5])
y_train = np.array([1.1, 2.2,  3.8, 4.1, 4.9, 5.2])x_train_stardard = transfor_stardard(x_train)
print(x_train_stardard)dense = 200
k = np.linspace(0,6,dense)
b = np.linspace(-2,8,dense)def activate(x):#return tanh(x)#return transfor_stardard(sigmoid(x))return x# y = kx+b
def get_loss_value(k,b):return np.square(activate(k*x_train+b - y_train)).sum()/len(x_train)
def get_loss_value_with_stardard(k,b):return np.square(activate(k*x_train_stardard+b - y_train)).sum()/len(x_train)def draw_contour_line(dense,isoheight): #dense表示取值的密度,isoheight表示等高线的值list_k = []list_b = []list_loss = []for i in range(dense):for j in range(dense):loss = get_loss_value(k[i],b[j])if 1.05*isoheight>loss>0.95*isoheight:list_k.append(k[i])list_b.append(b[j])else:passplt.subplot(211)plt.scatter(list_k, list_b, s=1)  # s=0.25比较合适list_k_stardard = []list_b_stardard = []for i in range(dense):for j in range(dense):loss_stardard = get_loss_value_with_stardard(k[i], b[j])if 1.05 * isoheight > loss_stardard > 0.95 * isoheight:list_k_stardard.append(k[i])list_b_stardard.append(b[j])else:passplt.subplot(212)plt.scatter(list_k_stardard, list_b_stardard, s=1)  # s=0.25比较合适draw_contour_line(dense,0.2)
draw_contour_line(dense,0.5)
draw_contour_line(dense,0.7)
draw_contour_line(dense,0.8)
draw_contour_line(dense,1)
#plt.title('Loss Func Contour Line')
plt.xlabel('k')
plt.ylabel('b')
plt.axis([0,6,-2,8])
plt.show()

损失函数
Loss=1m(Y−y)2Loss =\frac{1}{m} (Y - y)^2 Loss=m1​(Y−y)2
Y=kx+b 的3D 图

损失函数
Loss=1m(Y−y)2Loss =\frac{1}{m} (Y - y)^2 Loss=m1​(Y−y)2
Y=tanh(kx+b) 的3D 图

import math
import random
import numpy as np
import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D
def tanh(x):return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))x_train = np.array([0, 1, 2, 3, 4, 5])
y_train = np.array([1.1, 2.2, 3.8, 4.1, 4.9, 5.2])dense = 100
k = np.linspace(-2, 2, dense)
b = np.linspace(-4, 4, dense)
def get_loss_value(k, b):return np.square(k * x_train + b - y_train).sum() / len(x_train)
def draw_3D_diagram(dense):  # dense表示取值的密度,isoheight表示等高线的值list_k = []list_b = []list_loss = []for i in range(dense):for j in range(dense):list_k.append(k[i])list_b.append(b[j])loss = get_loss_value(k[i], b[j])list_loss.append(loss)fig = plt.figure()ax = Axes3D(fig)ax.scatter(list_k, list_b, list_loss)# xmin xmax ymin ymaxax.set_zlabel('Z', fontdict={'size': 15, 'color': 'red'})ax.set_ylabel('Y', fontdict={'size': 15, 'color': 'red'})ax.set_xlabel('X', fontdict={'size': 15, 'color': 'red'})draw_3D_diagram(dense)plt.show()

用 Tensorflow 可视化梯度下降


import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3DLR = 0.1
REAL_PARAMS = [1.2, 2.5]
INIT_PARAMS = [[5, 4],[5, 1],[2, 4.5]][2]x = np.linspace(-1, 1, 200, dtype=np.float32)   # x data# Test (1): Visualize a simple linear function with two parameters,
# you can change LR to 1 to see the different pattern in gradient descent.# y_fun = lambda a, b: a * x + b
# tf_y_fun = lambda a, b: a * x + b# Test (2): Using Tensorflow as a calibrating tool for empirical formula like following.# y_fun = lambda a, b: a * x**3 + b * x**2
# tf_y_fun = lambda a, b: a * x**3 + b * x**2# Test (3): Most simplest two parameters and two layers Neural Net, and their local & global minimum,
# you can try different INIT_PARAMS set to visualize the gradient descent.y_fun = lambda a, b: np.sin(b*np.cos(a*x))
tf_y_fun = lambda a, b: tf.sin(b*tf.cos(a*x))noise = np.random.randn(200)/10
y = y_fun(*REAL_PARAMS) + noise         # target# tensorflow graph
a, b = [tf.Variable(initial_value=p, dtype=tf.float32) for p in INIT_PARAMS]
pred = tf_y_fun(a, b)
mse = tf.reduce_mean(tf.square(y-pred))
train_op = tf.train.GradientDescentOptimizer(LR).minimize(mse)a_list, b_list, cost_list = [], [], []
with tf.Session() as sess:sess.run(tf.global_variables_initializer())for t in range(400):a_, b_, mse_ = sess.run([a, b, mse])a_list.append(a_); b_list.append(b_); cost_list.append(mse_)    # record parameter changesresult, _ = sess.run([pred, train_op])                          # training# visualization codes:
print('a=', a_, 'b=', b_)
plt.figure(1)
plt.scatter(x, y, c='b')    # plot data
plt.plot(x, result, 'r-', lw=2)   # plot line fitting
# 3D cost figure
fig = plt.figure(2); ax = Axes3D(fig)
a3D, b3D = np.meshgrid(np.linspace(-2, 7, 30), np.linspace(-2, 7, 30))  # parameter space
cost3D = np.array([np.mean(np.square(y_fun(a_, b_) - y)) for a_, b_ in zip(a3D.flatten(), b3D.flatten())]).reshape(a3D.shape)
ax.plot_surface(a3D, b3D, cost3D, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'), alpha=0.5)
ax.scatter(a_list[0], b_list[0], zs=cost_list[0], s=300, c='r')  # initial parameter place
ax.set_xlabel('a'); ax.set_ylabel('b')
ax.plot(a_list, b_list, zs=cost_list, zdir='z', c='r', lw=3)    # plot 3D gradient descent
plt.show()

参考资料
[1] https://blog.csdn.net/bitcarmanlee/article/details/85275016

神经网络-损失函数-等高线理解相关推荐

  1. 神经网络中的激活函数与损失函数深入理解推导softmax交叉熵

    神经网络中的激活函数与损失函数&深入理解softmax交叉熵 前面在深度学习入门笔记1和深度学习入门笔记2中已经介绍了激活函数和损失函数,这里做一些补充,主要是介绍softmax交叉熵损失函数 ...

  2. 对抗生成神经网络-GAN通俗理解

    对抗生成神经网络-GAN通俗理解 概念引入 对抗生成神经网络 效果的演变 由来 简介 生成模型 判别器工作原理 损失函数--交叉熵损失函数(BCE) 拓展-DCGAN网络架构 概念引入 超分辨率重构 ...

  3. 论文研读-机器学习可视化-神经网络损失函数吸引域可视化

    为交叉熵和平方误差神经网络损失函数的吸引域可视化 1 论文概述 1.1 文章摘要 1.2 专业术语 1.3 引言 2 相关工作 3 损失函数 4 适应值曲面分析 4.1 渐进梯度行走 4.2 损失梯度 ...

  4. ICLR 2022 | 香侬科技提出基于图神经网络的语义理解模型,获单项满分

    ©作者 | 香侬科技 来源 | 香侬科技 近日,深度学习国际顶级会议ICLR 2022向作者公布了论文录用结果.香侬科技3篇论文被大会收录,研究内容覆盖通用自然语义理解.NLP神经网络模型安全性.自动 ...

  5. 卷积层的主要作用_对卷积神经网络CNN的理解,一文读懂卷积神经网络。

    什么是神经网络? 神经网络ANN全称为(artificial neutral network),也就是人工神经网络,是一种仿人类神经网络原理构造的一种计算机模型. 主要由:输入,权重,激活函数来构成一 ...

  6. 卷积神经网络的深入理解-基础篇(卷积,激活,池化,误差反传)

    卷积神经网络的深入理解-基础篇 一.卷积(convolution) 1.无padding时 2.有padding时 3.卷积与全连接 通道数(一般一张彩色图像为三通道RGB) 二.激活(激活函数)(持 ...

  7. RNN循环神经网络的直观理解:基于TensorFlow的简单RNN例子

    RNN 直观理解 一个非常棒的RNN入门Anyone Can learn To Code LSTM-RNN in Python(Part 1: RNN) 基于此文章,本文给出我自己的一些愚见 基于此文 ...

  8. 卷积神经网络的形象理解

    一.CNN的局部感受野.共享权重和池化 学了很久的卷积神经网络,看了关于它的tutorial,也看没有明白它(convnet 中的卷积层)到底要做什么?说它再做特征提取,怎么看不出来提取的是什么特征? ...

  9. 初识神经网络——损失函数

    运用神经网络可以解决简单的机器问题,如分类问题与回归问题,这些联系数学的映射可能可以理解的更为清楚. 分类问题就如其名,是将数据进行分类,其包括二分类问题与多分类问题.二分类问题可以联系数学中的是非函 ...

最新文章

  1. 自动驾驶多模态传感器融合的综述
  2. NetXMS 1.2.6 发布,系统监控工具
  3. linux c socket选项:SO_ERROR
  4. 深度学习总结:tensorflow和pytorch关于RNN的对比,tf.nn.dynamic_rnn,nn.LSTM
  5. java usecompressedclasspointers_聊聊jvm的CompressedClassSpace
  6. html标签--!DOCTYPE (怪异模式和DTD)
  7. 牛客小白月赛8: E. 诡异数字(数位DP)
  8. android开发的学习路线
  9. Linux 驱动层实现阻塞和非阻塞
  10. linux重启网络服务后什么端口都不通,linux的端口不通怎么解决
  11. 《21天学通C语言(第7版)》一6.4 小 结
  12. Linux系统Ubuntu vim安装plugin
  13. openstack里给云主机配置vip
  14. Altium Designer中PCB画多层板(4、6、8...层)
  15. 有向图和有权图的邻接矩阵表示法
  16. vue 页面文字转播放声音 (SpeechSynthesisUtterance)
  17. 毕业论文-----有关目录的全部问题
  18. 陈雪明:美国交通技术在适老交通中的应用
  19. nvm use 报错exit status 145乱码
  20. 智能家居语音控制及摄像头人脸识别(含代码)

热门文章

  1. 利用ISA2006发布Exchange的RPC over HTTPS
  2. 解决ppt里面添加flash后在其他电脑上不能播放的问题
  3. Hugo中文文档 快速开始
  4. Odoo快速部署 附Odoo的Docker启动脚本
  5. 微型计算机在工作过程中突然遇到电源中断,微型计算机在工作过程中突然遇到电源中断,则计算机 中的信息将全部丢失,再次接通电源后也不能恢复数据。...
  6. jsmin php,使用JSMin.php缩小Javascript
  7. C# 8.0 的新特性概览和讲解
  8. 了解如何使用Tkinter在Python中创建GUI
  9. flexbox算法实现_如何使用Flexbox实现水平滚动
  10. sass webpack_如何在Visual Studio和Webpack中编译Sass文件