生成对抗网络(GAN) 手写数字图像生成

生成式对抗网络(GAN)

简介

生成式对抗网络的框架主要有两个模型,一个是生成模型(Generator),记为为 G,是用来生成数据,通过大量的样本学习,生成一些能够以假乱真的数据样本。第二个是辨别模型(Discriminator),记为D,主要是接受 G生成的样本数据和真实样本数据,进行辨别和分类。生成网络G接受一个随机的噪声z并生成图片,记为G(z);判别网络D的作用是判别一张图片x是否真实,对于输入x,D(x)是x为真实图片的概率。G和D相互博弈,通过学习,G的生成能力和D的辨别能力逐渐增强直到收敛。

原理

一个随机生成符合随机分布的噪音 z, 生成器G通过一个复杂的映射关系生成假样本

                                                                                           \hat{x}=G(z;\Theta g)

辨别器对于真实样本和假的样本,输出一个0到1之间的值,越大就越有可能是真实样本

                                                                                            s=D(x;\Theta d)

总的目标函数

                                   

代码

# encoding: utf-8
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import os
from tensorflow.examples.tutorials.mnist import input_data
mnist = inpu
  • 2
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
实验目的: 本实验旨在通过使用WPF技术,练习动态图像的绘制,提高学生的图形程序设计能力。 实验要求: - 使用WPF技术,设计一个动态图像绘制程序,能够随机生成多个大小、颜色、位置不同的图形,并能够在窗口中随机移动。 - 能够实现用户交互,鼠标点击图形后能够高亮显示,并能够拖动。 - 窗口大小可变,图形应自适应大小。 实验步骤: 1. 创建WPF应用程序 打开Visual Studio 2019,选择“创建新项目”,选择“Windows桌面”中的“WPF应用程序”,命名为“DynamicGraphics”,创建新项目。 2. 创建主窗口 在Solution Explorer中,找到MainWindow.xaml文件,打开并编辑,添加Grid作为主容器,设置背景色为白色,同时设置SizeChanged事件,以便实现窗口大小自适应。 ```xaml <Window x:Class="DynamicGraphics.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Dynamic Graphics" Height="450" Width="800" SizeChanged="Window_SizeChanged"> <Grid Background="White"> </Grid> </Window> ``` 在MainWindow.xaml.cs文件中,添加窗口大小自适应的代码。 ```csharp private void Window_SizeChanged(object sender, SizeChangedEventArgs e) { //获取当前窗口的宽度和高度 double width = e.NewSize.Width; double height = e.NewSize.Height; //将主容器的宽度和高度设置为窗口的宽度和高度 mainGrid.Width = width; mainGrid.Height = height; } ``` 3. 创建图形类 在Solution Explorer中,右键点击“DynamicGraphics”项目,选择“添加”->“类”,命名为“Graphics”,创建新类。 在Graphics类中,定义图形的属性,包括位置、大小、颜色等,同时定义绘制图形的方法。 ```csharp public class Graphics { public Point position { get; set; } //位置 public Size size { get; set; } //大小 public Color color { get; set; } //颜色 public Graphics(Point p, Size s, Color c) { position = p; size = s; color = c; } public void Draw(Canvas canvas) { Rectangle rect = new Rectangle { Width = size.Width, Height = size.Height, Fill = new SolidColorBrush(color) }; Canvas.SetLeft(rect, position.X); Canvas.SetTop(rect, position.Y); canvas.Children.Add(rect); } } ``` 4. 在主窗口中添加图形 在MainWindow.xaml.cs文件中,定义一个List来存储图形,同时在窗口加载时添加多个图形。 ```csharp public partial class MainWindow : Window { private List<Graphics> graphicsList = new List<Graphics>(); public MainWindow() { InitializeComponent(); //随机生成多个图形 Random random = new Random(); for (int i = 0; i < 20; i++) { Point position = new Point(random.Next(0, (int)mainGrid.Width), random.Next(0, (int)mainGrid.Height)); Size size = new Size(random.Next(20, 100), random.Next(20, 100)); Color color = Color.FromRgb((byte)random.Next(0, 256), (byte)random.Next(0, 256), (byte)random.Next(0, 256)); Graphics graphics = new Graphics(position, size, color); graphics.Draw(mainGrid); graphicsList.Add(graphics); } } } ``` 5. 实现用户交互 在Graphics类中,添加IsSelected属性和Select和Deselect方法,用于实现用户交互。 ```csharp public class Graphics { public Point position { get; set; } //位置 public Size size { get; set; } //大小 public Color color { get; set; } //颜色 public bool IsSelected { get; set; } //是否被选中 public Graphics(Point p, Size s, Color c) { position = p; size = s; color = c; IsSelected = false; } public void Draw(Canvas canvas) { Rectangle rect = new Rectangle { Width = size.Width, Height = size.Height, Fill = new SolidColorBrush(color) }; Canvas.SetLeft(rect, position.X); Canvas.SetTop(rect, position.Y); canvas.Children.Add(rect); } public void Select() { IsSelected = true; color = Colors.Yellow; } public void Deselect() { IsSelected = false; color = Color.FromRgb((byte)new Random().Next(0, 256), (byte)new Random().Next(0, 256), (byte)new Random().Next(0, 256)); } } ``` 在MainWindow.xaml.cs文件中,添加鼠标点击和拖动事件的实现。 ```csharp private Graphics selectedGraphics = null; private void mainGrid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Point point = e.GetPosition(mainGrid); //查找被点击的图形 foreach (Graphics graphics in graphicsList) { if (graphics.position.X <= point.X && graphics.position.Y <= point.Y && graphics.position.X + graphics.size.Width >= point.X && graphics.position.Y + graphics.size.Height >= point.Y) { if (selectedGraphics != null) { selectedGraphics.Deselect(); selectedGraphics.Draw(mainGrid); } graphics.Select(); graphics.Draw(mainGrid); selectedGraphics = graphics; break; } } } private void mainGrid_MouseMove(object sender, MouseEventArgs e) { if (selectedGraphics != null && e.LeftButton == MouseButtonState.Pressed) { Point point = e.GetPosition(mainGrid); //更新图形位置 selectedGraphics.position = new Point(point.X - selectedGraphics.size.Width / 2, point.Y - selectedGraphics.size.Height / 2); selectedGraphics.Draw(mainGrid); } } ``` 6. 完成实验 运行程序,即可看到多个随机生成的图形,在鼠标点击和拖动时能够高亮显示和移动。 实验结论: 本实验通过使用WPF技术,设计了一个动态图像绘制程序,能够随机生成多个大小、颜色、位置不同的图形,并能够在窗口中随机移动。同时实现了用户交互,鼠标点击图形后能够高亮显示,并能够拖动。窗口大小可变,图形能够自适应大小。通过本实验,提高了学生的图形程序设计能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值