机器学习笔记之生成对抗网络(一)逻辑介绍

news2024/11/14 2:59:49

机器学习笔记之生成对抗网络——逻辑介绍

  • 引言
    • 生成对抗网络——示例
    • 生成对抗网络——数学语言描述
    • 生成对抗网络——判别过程描述

引言

本节将介绍生成对抗网络的基本逻辑与数学语言描述

生成对抗网络——示例

生成对抗网络(Generative Adversarial Networks,GAN),它采用对抗学习的方式对样本特征进行学习。这里以临摹绘画为例,对对抗学习思想进行描述。

假设我是一名绘画爱好者,我的目标是成为一个画家。要成为画家,意味着我的绘画水平需要提升至一定的高度,也就是说,我画出的画需要得到他人的肯定、认可
我们首先需要学习大师们的名画,通过对名画进行临摹,从而提升我的绘画水平。在锻炼自身的绘画水平的同时,我们自然不能闭门造车——自己觉得临摹的像。我们需要将自己的画给鉴赏家们鉴赏。这种鉴赏无非有两种对立方向的结果

  • 一种方向是 临摹的太差,鉴赏家一眼就能看出哪一幅是你画的,哪一幅是大师画的
  • 另一种方向是 临摹技术非常过硬。两张画放在鉴赏家面前,他没有办法分辨出哪一幅是你画的,哪一幅是大师画的,完全可以以假乱真。

但从鉴赏家的角度观察,如果我找了一个门外汉——他本人可能没有太高的鉴赏能力,我的画可能并不是很像,他也有可能无法分辨出来。因此我也需要找到鉴赏能力足够高的鉴赏家进行鉴别。
那鉴赏家如何去提升鉴赏能力呢?自然是多观察,学习大师们的名画来提升自身的鉴赏水平。

从上面的描述可以观察到,大师的画是客观的优秀作品,是静态不变的;而我的绘画水平,我临摹的随着我的绘画水平的提高而变化。同时,鉴赏家的鉴别能力也随着他学习、鉴赏大师的画而提升。此时的 对抗状态 出现了:

  • 我需要提升自身的绘画水平,我画出的画能够与大师的画以假乱真,从而骗过鉴赏家的眼睛;
  • 鉴赏家需要提升自身的鉴赏能力,当我的画与大师的画放在一起时,需要精准地分辨出哪个是大师的画、哪个是我的画,从而尽可能地防止以假乱真的出现。

但是我们的目标是我成为高水平的画家,而鉴赏家的水平提升只是一种借助手段。只有我的画以假乱真,高水平的鉴赏专家无法分辨的前提下,我才能够成为高水平的画家

生成对抗网络——数学语言描述

已知一个样本集合 X = { x ( i ) } i = 1 N \mathcal X = \left\{x^{(i)}\right\}_{i=1}^N X={x(i)}i=1N,该样本是真实样本,是从客观的真实分布中产生的样本。将该分布记作 P d a t a \mathcal P_{data} Pdata;根据上面的示例描述,可以将这个 P d a t a \mathcal P_{data} Pdata看作大师的画,是静态不变的。

  • 生成模型(绘画爱好者) 本身需要生成样本,而生成出样本的分布记作 P g e n e \mathcal P_{gene} Pgene;可以看作是绘画爱好者临摹的作品。定义该模型的参数 θ g e n e \theta_{gene} θgene,最终对应的概率模型可表示为 P g e n e ( x ; θ g e n e ) \mathcal P_{gene}(x;\theta_{gene}) Pgene(x;θgene)
    也就是说,模型生成的样本服从概率模型分布~
    x ∼ P g e n e ( x ; θ g e n e ) x \sim \mathcal P_{gene}(x;\theta_{gene}) xPgene(x;θgene)

    需要注意的是,我们并不对 P g e n e ( x ; θ g e n e ) \mathcal P_{gene}(x;\theta_{gene}) Pgene(x;θgene)进行建模,而是通过神经网络的通用逼近定理(Universal Approximation Theorem)对 P g e n e ( x ; θ g e n e ) \mathcal P_{gene}(x;\theta_{gene}) Pgene(x;θgene)进行近似。
    纯粹的神经网络不具备随机性,也就是说,只有给定一组确定的输入信息,才能够构建计算图。以此,需要给该神经网络设计一个 输入分布 Z \mathcal Z Z。这种分布通常情况下是一些简单分布,如高斯分布:
    这里的 μ i n i t , Σ i n i t \mu_{init},\Sigma_{init} μinit,Σinit不是参数,这只是一个给定的简单分布。
    Z ∼ N ( μ i n i t , Σ i n i t ) \mathcal Z \sim \mathcal N(\mu_{init},\Sigma_{init}) ZN(μinit,Σinit)
    至此,定义神经网络结构 G ( Z ; θ g e n e ) \mathcal G(\mathcal Z;\theta_{gene}) G(Z;θgene)生成过程可表示为如下形式:
    x = G ( Z ; θ g e n e ) x = \mathcal G(\mathcal Z;\theta_{gene}) x=G(Z;θgene)
    对应的计算图结构简单表示如下:
    生成过程中的计算图结构

  • 判别模型(鉴赏家) 同样通过神经网络进行描述,它的结果是一个概率分布。而该分布表示的意义是:判别样本 x x x是大师的画的概率。如果用当前环境的数学语言描述,则是“样本 x x x服从 P d a t a \mathcal P_{data} Pdata分布的概率”。记作 D ( x ; θ d ) \mathcal D(x;\theta_d) D(x;θd)
    这里的样本 x x x既可以是服从 P d a t a \mathcal P_{data} Pdata的样本,也可以是从生成模型 P g e n e ( x ; θ g e n e ) \mathcal P_{gene}(x;\theta_{gene}) Pgene(x;θgene)中产生的样本,而 D ( x ; θ d ) \mathcal D(x;\theta_d) D(x;θd)仅执行一个判别操作,并返回一个概率结果。
    这意味着该概率越趋近于 1 1 1,样本 x x x越有可能服从于 P d a t a \mathcal P_{data} Pdata;反之,样本 x x x越有可能是生成模型 P g e n e ( x ; θ g e n e ) \mathcal P_{gene}(x;\theta_{gene}) Pgene(x;θgene)中产生的样本。

整个生成对抗网络的计算图结构表示如下:
生成对抗网络——计算图结构

生成对抗网络——判别过程描述

通过观察上图,可以看到该模型架构的前向传播过程。本质上就是两个前馈神经网络。但该结构是如何进行判别并以此通过反向传播将模型参数反馈给神经网络的?对该结构的 目标函数(策略、损失函数) 进行分析:

  • 判别模型的角度观察,它的 判别能力高 主要体现在两个方面:

    • 如果从 P d a t a \mathcal P_{data} Pdata中选取一个样本 x x x判别模型 D ( x ; θ d ) \mathcal D(x;\theta_d) D(x;θd)进行判断,那么 D ( x ; θ d ) \mathcal D(x;\theta_d) D(x;θd)的返回结果更趋近于 1 1 1 方向;
    • 反之,如果从生成模型 P g e n e ( x ; θ g e n e ) \mathcal P_{gene}(x;\theta_{gene}) Pgene(x;θgene)中选取一个样本 x x x判别模型 D ( x ; θ d ) \mathcal D(x;\theta_d) D(x;θd)进行判断,那么 D ( x ; θ d ) \mathcal D(x;\theta_d) D(x;θd)的返回结果更趋近于 0 0 0 方向 。

    对应数学语言可表示为:

    • 由于 D ( x ; θ d ) \mathcal D(x;\theta_d) D(x;θd)表示概率结果,因此 D ( x ; θ d ) ⇓ \mathcal D(x;\theta_d) \Downarrow D(x;θd)使用 1 − D ( x ; θ d ) 1 - \mathcal D(x;\theta_d) 1D(x;θd)进行表示;
    • 生成模型中的 x x x可以使用 x = G ( Z ; θ g e n e ) x = \mathcal G(\mathcal Z;\theta_{gene}) x=G(Z;θgene)进行替换。
    • 使用 log ⁡ D ( ⋅ ) \log \mathcal D(\cdot) logD()替换 D ( ⋅ ) \mathcal D(\cdot) D();和极大似然估计中的‘对数似然思想’相似,并且 log ⁡ \log log函数是单调递增函数,并不影响 D ( ⋅ ) \mathcal D(\cdot) D()的取值方向。
      { if  x ∼ P d a t a ⇒ log ⁡ D ( x ; θ d ) ⇑ if  x ∼ P g e n e ( x ; θ g e n e ) ⇒ log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ⇑ s . t . Z ∼ P ( Z ) e . g . Z ∼ N ( μ i n i t , Σ i n i t ) \begin{aligned} & \begin{cases} \text{if } x \sim \mathcal P_{data} \quad \Rightarrow \log \mathcal D(x;\theta_d) \Uparrow \\ \text{if } x \sim \mathcal P_{gene}(x;\theta_{gene}) \quad \Rightarrow \log \left\{1 - \mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\} \Uparrow \end{cases} \\ & s.t. \mathcal Z \sim \mathcal P(\mathcal Z) \quad e.g. \mathcal Z \sim \mathcal N(\mu_{init},\Sigma_{init}) \end{aligned} {if xPdatalogD(x;θd)if xPgene(x;θgene)log{1D[G(Z;θgene);θd]}s.t.ZP(Z)e.g.ZN(μinit,Σinit)

    如果一个鉴赏家的鉴赏水平高,着意味着 log ⁡ D ( x ; θ d ) \log \mathcal D(x;\theta_d) logD(x;θd) log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } \log \left\{1 - \mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\} log{1D[G(Z;θgene);θd]} 都要高

    • 这里使用期望的形式对全局进行描述,因为期望与积分之间仅相差常数倍的关系,它的本质依然是‘极大似然估计’。以 P d a t a \mathcal P_{data} Pdata的样本集合为例:
      E x ∼ P d a t a [ log ⁡ D ( x ; θ d ) ] = 1 N ∑ x ( i ) ∈ X log ⁡ D ( x ( i ) ; θ d ) \mathbb E_{x \sim \mathcal P_{data}}[\log \mathcal D(x;\theta_d)] = \frac{1}{N} \sum_{x^{(i)} \in \mathcal X} \log \mathcal D(x^{(i)};\theta_d) ExPdata[logD(x;θd)]=N1x(i)XlogD(x(i);θd)
    • 这里的 D \mathcal D D具体是指神经网络结构 D \mathcal D D内部的模型参数。通过选择合适的参数,使得期望结果最大。
    • 期望结果主要分为两个部分:一个是从 P d a t a \mathcal P_{data} Pdata中采样得到的期望 E x ∼ P d a t a [ log ⁡ D ( x ; θ d ) ] \mathbb E_{x \sim \mathcal P_{data}} \left[\log \mathcal D(x;\theta_d)\right] ExPdata[logD(x;θd)];另一个是从初始分布 P ( Z ) \mathcal P(\mathcal Z) P(Z)中采样得到的期望 E Z ∼ P ( Z ) [ 1 − log ⁡ { D [ G ( Z ; θ g e n e ) ; θ d ] } ] \mathbb E_{\mathcal Z \sim \mathcal P(\mathcal Z)} \left[1 - \log \left\{\mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\}\right] EZP(Z)[1log{D[G(Z;θgene);θd]}].
      max ⁡ D { E x ∼ P d a t a [ log ⁡ D ( x ; θ d ) ] + E Z ∼ P ( Z ) [ log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ] } \mathop{\max}\limits_{\mathcal D} \left\{\mathbb E_{x \sim \mathcal P_{data}} \left[\log \mathcal D(x;\theta_d)\right] + \mathbb E_{\mathcal Z \sim \mathcal P(\mathcal Z)} \left[ \log \left\{1 -\mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\}\right]\right\} Dmax{ExPdata[logD(x;θd)]+EZP(Z)[log{1D[G(Z;θgene);θd]}]}
  • 生成模型的角度观察,在判别模型能力强的前提下,想要体现样本的生成水平高只需一个要求:生成出的样本在判别模型面前,让其判别失误。
    关于生成样本的正确判别标准是 log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ⇑ \log \left\{1 - \mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\} \Uparrow log{1D[G(Z;θgene);θd]},那么判别失误的标准自然是 log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ⇓ \log \left\{1 - \mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\} \Downarrow log{1D[G(Z;θgene);θd]}

    对应数学语言可表示为:
    同上面的逻辑描述,通过对神经网络结构 G \mathcal G G内部的模型参数进行选择,使得期望结果最小。
    min ⁡ G { E Z ∼ P ( Z ) [ log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ] } \mathop{\min}\limits_{\mathcal G} \left\{\mathbb E_{\mathcal Z \sim \mathcal P(\mathcal Z)} \left[\log \left\{1 - \mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\}\right]\right\} Gmin{EZP(Z)[log{1D[G(Z;θgene);θd]}]}

结合判别模型、生成模型两个角度,总的目标函数可表示为如下形式:
min ⁡ G max ⁡ D { E x ∼ P d a t a [ log ⁡ D ( x ; θ d ) ] + E Z ∼ P ( Z ) [ log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ] } \mathop{\min}\limits_{\mathcal G} \mathop{\max}\limits_{\mathcal D} \left\{\mathbb E_{x \sim \mathcal P_{data}} \left[\log \mathcal D(x;\theta_d)\right] + \mathbb E_{\mathcal Z \sim \mathcal P(\mathcal Z)} \left[ \log \left\{1 -\mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\}\right]\right\} GminDmax{ExPdata[logD(x;θd)]+EZP(Z)[log{1D[G(Z;θgene);θd]}]}
说明:

  • 首先关于 min ⁡ G max ⁡ D \mathop{\min}\limits_{\mathcal G} \mathop{\max}\limits_{\mathcal D} GminDmax顺序,在上面提到过,判别模型的水平提升只是一种手段,而最终目标是从生成模型中得到‘能够骗过判别模型’的优秀样本
  • 当判别模型的判别能力足够高后,这意味着网络结构 D \mathcal D D中的参数 θ d \theta_d θd逐渐稳定,最终不再变化。此时的 E x ∼ P d a t a [ log ⁡ D ( x ; θ d ) ] \mathbb E_{x \sim \mathcal P_{data}}[\log \mathcal D(x;\theta_d)] ExPdata[logD(x;θd)]相当于一个常数结果,而常数结果不影响网络结构 G \mathcal G G模型参数的选择。假设 θ d \theta_d θd逐步稳定至最优解 θ d ^ \hat {\theta_d} θd^,那么上述公式可表示为如下形式:
    min ⁡ G max ⁡ D { E x ∼ P d a t a [ log ⁡ D ( x ; θ d ) ] + E Z ∼ P ( Z ) [ log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ] } = min ⁡ G { E x ∼ P d a t a [ log ⁡ D ( x ; θ d ^ ) ] ⏟ 常数 C + E Z ∼ P ( Z ) [ log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ^ ] } ] } = min ⁡ G { E Z ∼ P ( Z ) [ log ⁡ { 1 − D [ G ( Z ; θ g e n e ) ; θ d ] } ] } \begin{aligned} & \quad \mathop{\min}\limits_{\mathcal G} \mathop{\max}\limits_{\mathcal D} \left\{\mathbb E_{x \sim \mathcal P_{data}} \left[\log \mathcal D(x;\theta_d)\right] + \mathbb E_{\mathcal Z \sim \mathcal P(\mathcal Z)} \left[ \log \left\{1 -\mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\}\right]\right\} \\ & = \mathop{\min}\limits_{\mathcal G} \left\{\underbrace{\mathbb E_{x \sim \mathcal P_{data}} \left[\log \mathcal D(x;\hat {\theta_d})\right]}_{常数\mathcal C} + \mathbb E_{\mathcal Z \sim \mathcal P(\mathcal Z)} \left[\log \left\{1 -\mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\hat {\theta_d}]\right\}\right]\right\} \\ & = \mathop{\min}\limits_{\mathcal G} \left\{\mathbb E_{\mathcal Z \sim \mathcal P(\mathcal Z)} \left[\log \left\{1 - \mathcal D [\mathcal G(\mathcal Z;\theta_{gene}) ;\theta_d]\right\}\right]\right\} \end{aligned} GminDmax{ExPdata[logD(x;θd)]+EZP(Z)[log{1D[G(Z;θgene);θd]}]}=Gmin 常数C ExPdata[logD(x;θd^)]+EZP(Z)[log{1D[G(Z;θgene);θd^]}] =Gmin{EZP(Z)[log{1D[G(Z;θgene);θd]}]}
    这与生成模型角度的思想完全相同。

下一节将介绍关于生成对抗网络全局最优解的求解逻辑

相关参考:
生成对抗网络1——例子
生成对抗网络2——数学描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/188079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视觉 → 检测提取

目标检测任务非常有趣且具有挑战性。有些任务非常复杂,需要更多数据才能有所产出。但在这篇文章中,我将展示一个符号检测的小任务,它可以用更少的数据完成。该项目的目的是使用计算机视觉技术从一组给定的图像中提取文本并检测各种符号。在这…

UniApp已经接了手机数据线,但运行工具警告 “没有检查到设备“ (华为手机为例 进行解决)

大部分第一次使用uni进行手机调试都会遇到这个问题 首先 将手机的数据线插入电脑的usb接口是必备前提 然后 就是手机的权限拦截了设备扫描 这就是uni工具找不到设备的原因 接入手机线后 数据会弹出一个USB的提示 点进去之后 我们要设置 允许传输文件 千万别仅充电 接下来的…

Java 以数据流的形式发送数据request Java 数据封装到request中

Java 以数据流的形式发送数据request Java 数据封装到request中 一、描述 1、在做微信支付结果通知的时候,看到一个描述:微信会把相关支付结果及用户信息通过数据流的形式发送给商户 ,那么java如何通过数据流的形式发送数据呢? 二…

idea中的Debug工具的使用介绍

文章目录1、设置断点给断点添加条件2、打开DebugDebu启动方式3、Debug功能介绍左侧功能区顶部功能区使用Debug工具时要先进行打断点的操作1、设置断点 断点就是程序运行暂停的位置,在这个位置以后可以根据自己的操作一步一步的执行程序。 idea中设置断点&#xff1…

FreeMarker基础知识

1、总览 官网:http://freemarker.foofun.cn/ 视频地址:https://www.bilibili.com/video/BV1zZ4y1u7iA 2、FreeMarker概述 2.1 FreeMarker概念 FreeMarker 是⼀款 模板引擎: 即⼀种基于模板和要改变的数据, 并⽤来⽣成输出⽂本(…

动态化护眼全新体验,被誉为“护眼神器”的南卡护眼台灯Pro评测出炉

自从家中的孩子上小学后,随着课后作业的逐渐增加,在书房学习时间更长了,由于平时关注到孩子用眼习惯,眼睛有些轻度近视。作为年轻一代的家长,对孩子的用眼健康方面一定要重视,在照明方面,护眼台…

Redis基础篇:Redis简介和安装

第一章:Redis简介 一:简介 Redis诞生于2009年,基于内存的键值型NoSQL数据库。 二:特征 1:键值型:value支持多种不同的数据结构,功能丰富。 2:单线程:单线程执行命令&…

Kubernetes介绍

1 什么是Kubernetes? Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。 使用Kubernetes可以: ● 自动化容器的部署和复制 ● 随时扩展或收缩容器规模 ● 将容器组织成组&…

第四章.神经网络—单层感知器

第四章.神经网络 4.1 单层感知器 1.单层感知器示意图 1).第一种表示方法: 举例说明: 2).第二种表示方法: 公式推导: 举例说明: 预测值(y)和标签值(t)相同,停止迭代循环. 2.学习率η 1).η取值说明&…

Python流程控制语句之跳转语句

上一篇:Python流程控制语句之循环语句 文章目录前言一、break 语句二、continue 语句三、pass 空语句总结前言 上一篇博客我们讲解了Python中的循环语句,知道循环条件一直满足时,代码将会一直执行下去,就像一辆迷路的车&#xff…

《满江红》《流浪地球2》孰能胜出,元宇宙电影能否成为票房黑马?

截止1月28日12时,2023年春节档期总票房达67.57亿元。其中,《满江红》以26.05亿元票房居2023年春节档票房榜榜首;《流浪地球2》位居第二,票房成绩为21.63亿元。摆在未来人类面前就两条路,一条向外星辰大海,一条向内元宇宙。《流浪地…

微信小程序017音乐播放器系统 php java

小程序前端框架:uniapp 小程序运行软件:微信开发者 后端技术:javaSsm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 基于音乐播放器小程序的设计基于现有的手机,可以实现首页、个人中心、用户管理,音乐…

拉伯证券|开盘暴跌20%,三文鱼第一股业绩变脸!

超900家公司成绩预亏,多家公司发布成绩预告后大跌。 佳沃食品今天开盘20%跌停,这是该股史上开盘最大跌幅。早盘该股成交额显着扩展,半日成交额超越3.5亿元,收盘跌18.04%。 资料显现,佳沃食品是优质蛋白食品领域的大消…

python入门教程(非常详细),python贪吃蛇最简单代码

大家好,小编来为大家解答以下问题,python编程代码大全设计入门,python入门教程(非常详细),现在让我们一起来看看吧! 1、python编程例子有哪些? python编程经典例子: 1、画爱心表白、图形都是由…

除了Navicat破解版、DBeaver,免费还好用的数据库管理工具/SQL工具还有推荐吗?

很多国内SQL学习者和开发者对Navicat、DBeaver等国外数据库管理工具已经很熟悉了。但是,有没有比他们更适合SQL开发者的数据库管理/SQL工具呢?这里,笔者结合自己的调研来聊一下。 笔者做过一些用户调研。 Navicat虽然功能强大,但…

win10安装opencv

第一步:会有skbuild,cmake等依赖库报错,先安装依赖pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple scikit-buildpip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple cmake第二步:pip3 install opencv-python若…

Python数据可视化之折线图

Python数据可视化之折线图 提示:前言 Python数据可视化之折线图 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录Python数据可视化之折线图前言一、导入包二、选择数据集三、折线图四、图形的大小和图表…

什么游戏视频录制软件比较好?10 款的游戏录屏软件你值得收藏

市面上有各种各样的游戏捕捉软件,当然,它们都声称是有史以来最好的游戏软件。但有些比其他的更好,最适合您的游戏记录器在很大程度上取决于您要玩的游戏以及您运行的 PC 类型。 目前最好的游戏屏幕录像机 让我们来探索自称是最佳游戏屏幕录…

NetLogo 语法总结

NetLogo 语法总结NetLogo语法的怪异。。。。。。NetLogo语法关键在于你要把它当成一个软件使用,而不是一个通用的编程语言。首先,上网搜搜setup go是怎么用的,或者买本书,本文不再赘述NetLogo世界turtlespatcheslinksobserver(上帝…

np.savetxt()存储数据

前言 使用np.savetxt()方法可以将数据保存为txt文件或者是csv文件。 1 np.savetxt()存储txt文件 1-1 基础参数 numpy.savetxt(fname,arrry,fmt%.18e,delimiter ,newline\n,header,footer,comments# ,encodingNone,) 1-2 参数详解 fname:要存入的文件、文件名、或生成器。 ar…