动态规划之钢条切割

【DP1】钢条分割详解 [DP] 原文再续,书接上一回,上一篇文章的背包讲的有点过于狭义了,我就某一类问题解释一种算法的思想:动态规划(Dynamic Programming)。简称DP。 我们在生活中不免会遇到一类问题,求什么什么的最大,什么什么的最小。在这类问题中,如果有算法基础的同学可能会知道贪心算法,但是贪心算法是无法在所有的情况下保证最优解的,而DP是可以的。 那么DP是什么?我们直接用一道题目来举例子去解释DP。 这里采用的例子引用自CLRS中的钢条分割问题。我只做一个概括性复述。有兴趣的同学可以去看看原著* (这里强 阅读详情
《算法导论》老师布置的作业,解决钢条切割问题:

附上代码:

package com.crazymonkey;

import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 * 算法导论第15章之钢条切割
 * @author CrazyMonkey
 * @since 2013/10/16
 */
public class SteelStripCut{

	public static void main(String[] args) {

		String s = JOptionPane.showInputDialog(null, "请输入待切割钢条长度(必须为小于等于10的正整数):", "输入钢条长度",
				JOptionPane.INFORMATION_MESSAGE);
		int length = 0;
		if (s != null) {
			boolean flag = true;
			while (flag)
				try {
					length = Integer.parseInt(s);
					flag = false;

				} catch (Exception e) {
					s = JOptionPane.showInputDialog(null, "请重新输入待切割钢条长度(必须为小于等于10的正整数):",
							"输入钢条长度",
							JOptionPane.INFORMATION_MESSAGE);
				}

			Draw draw = new Draw("切割长度为 " + length + " 的结果");
			draw.setCanvasSize(length * 100, 100);
			draw.setXscale(0, length * 100);
			draw.setYscale(0, 100);
			draw.setLocation(200, 200);
			draw.filledRectangle(length * 50, 50, length * 50, 10);
			draw.setPenColor(Color.RED);
			draw.setPenRadius(0.01);

			int p = extendButtomUpCutRod(price, length);
			ArrayList<Integer> record = new ArrayList<Integer>();
			while (length > 0) {
				record.add(save[length]);
				length -= save[length];
			}

			int start = 0;
			for (int i = 0; i < record.size(); i++) {

				start += record.get(i) * 100;
				int x = start;
				int y0 = 30;
				int y1 = 70;
				if (i != record.size() - 1)
					draw.line(x, y0, x, y1);
				draw.text(x - record.get(i) * 50, 70, record.get(i) + "");
			}
			draw.textLeft(length * 100, 20, "最大利润为:" + p);
			draw.show();
		}

	}

	/**
	 * 自顶向下的递归实现
	 * 
	 * @param p
	 *            价格列表
	 * @param n
	 *            初始长度
	 * @return 最大利益
	 */
	public static int cutRod(int[] p, int n) {
		if (n == 0)
			return 0;
		earnings = p[0];
		for (int i = 1; i <= n; i++)
			earnings = Math.max(earnings, p[i] + cutRod(p, n - i));
		return earnings;

	}

	/**
	 * 带备忘的自顶向下的实现
	 * 
	 * @param p
	 *            价格列表
	 * @param n
	 *            初始长度
	 * @return 最大利益
	 */
	public static int memoizedCutRod(int[] p, int n) {
		int[] revenue = new int[n + 1];
		for (int i = 0; i < n + 1; i++)
			revenue[i] = p[0];
		return memoizedCutRodAux(p, n, revenue);
	}

	private static int memoizedCutRodAux(int[] p, int n, int[] r) {

		if (r[n] >= 0)
			return r[n];
		if (n == 0)
			earnings = 0;
		else
			earnings = p[0];
		for (int i = 1; i <= n; i++)
			earnings = Math
					.max(earnings, p[i] + memoizedCutRodAux(p, n - i, r));
		r[n] = earnings;
		return earnings;

	}

	/**
	 * 带备忘的自底向上的实现
	 * 
	 * @param p
	 *            价格列表
	 * @param n
	 *            初始长度
	 * @return 最大利益
	 */
	public static int buttomUpCutRod(int[] p, int n) {
		int[] revenue = new int[n + 1];

		revenue[0] = 0;
		for (int i = 1; i <= n; i++) {
			earnings = p[0];
			for (int j = 1; j <= i; j++)
				earnings = Math.max(earnings, p[j] + revenue[i - j]);
			revenue[i] = earnings;
		}
		return revenue[n];

	}

	/**
	 * 扩展的自底向上切割
	 * 
	 * @param p
	 * @param n
	 * @return
	 */
	public static int extendButtomUpCutRod(int[] p, int n) {
		int[] revenue = new int[n + 1];
		save = new int[n + 1];
		revenue[0] = 0;

		for (int i = 1; i <= n; i++) {
			earnings = p[0];
			for (int j = 1; j <= i; j++) {

				if (earnings < p[j] + revenue[i - j]) {
					earnings = p[j] + revenue[i - j];
					save[i] = j;
				}
				revenue[i] = earnings;
			}
		}
		return revenue[n];
	}

	/**
	 * 打印最优解
	 * 
	 * @param p
	 * @param n
	 */
	public static void print(int[] p, int n) {
		extendButtomUpCutRod(p, n);
		while (n > 0) {
			System.out.print(save[n] + " ");
			n -= save[n];
		}

	}

	/*
	 * 钢条价目表 预先给定
	 */
	private static final int[] price = { Integer.MIN_VALUE, 1, 5, 8, 9, 10, 17,
			17, 20, 24, 30 };
	private static int earnings = 0;

	private static int[] save;

}

上张图:


该代码中遇到的画图类是自己开发的简单的一个类,提供了非常基本的画图方法,附上代码:

package com.crazymonkey;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.net.*;
import java.util.LinkedList;
import java.util.TreeSet;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.util.ArrayList;

/**
 * 绘图类,此类实例提供基本的绘图支持,包括:<br>
 * <ul>
 * <li>基本几何图形</li>
 * <li>图片</li>
 * <li>文本</li>
 * </ul>
 * <br>
 * <p>
 * 此类对象提供对基本事件的支持,例如鼠标移动,键盘按键处理等事件。用例只需要实现{@link DrawListener}接口,
 * 就可以完成对基本事件的处理。另外,此类实例提供了将画布上的图像保存为实际图片的功能。
 * 
 * @author CrazyMonkey
 */

public final class Draw implements ActionListener, MouseListener,
		MouseMotionListener, KeyListener {

	

	/**
	 * 创建一个默认的绘图对象
	 */
	public Draw() {
		init();
	}

	/**
	 * 创建一个指定标题的绘图对象
	 * 
	 * @param name
	 *            绘图窗口标题
	 */
	public Draw(String name) {
		this.name = name;
		init();
	}

	/*
	 * 框架、面板、画布等初始化
	 */
	private void init() {

		if (frame != null)
			frame.setVisible(false);
		frame = new JFrame();
		offscreenImage = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_ARGB);
		onscreenImage = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_ARGB);
		offscreen = offscreenImage.createGraphics();
		onscreen = onscreenImage.createGraphics();
		setXscale();
		setYscale();
		offscreen.setColor(DEFAULT_CLEAR_COLOR);
		offscreen.fillRect(0, 0, width, height);
		setPenColor();
		setPenRadius();
		setFont();
		clear();

		// 抗锯齿处理
		RenderingHints hints = new RenderingHints(
				RenderingHints.KEY_ANTIALIASING,
				RenderingHints.VALUE_ANTIALIAS_ON);
		hints.put(RenderingHints.KEY_RENDERING,
				RenderingHints.VALUE_RENDER_QUALITY);
		offscreen.addRenderingHints(hints);

		// 填充框架
		ImageIcon icon = new ImageIcon(onscreenImage);
		JLabel draw = new JLabel(icon);

		draw.addMouseListener(this);
		draw.addMouseMotionListener(this);

		frame.setContentPane(draw);
		frame.addKeyListener(this);
		frame.setResi
JAVA算法:把一块木板切成正方形的最低成本—贪心算法 JAVA算法:把一块木板切成正方形的最低成本—动态规划 给出了一块长度为m宽度为n的木板,需要把这个木板分解成m*n的正方形,这样就可以把破坏的成本降到最低。 每边的切割成本将为板提供。简言之,我们需要选择这样一个切割的顺序,以使成本最小化。 对于上述板,切割成正方形的最佳方法是:最低总成本为42。 使用以下步骤: Initial Value : Total_cost = 0 Tot... 阅读详情

相关推荐

【动态规划】钢条切割问题

0- 动态规划问题的一般步骤 1- 刻画一个最优解的结构特征 2- 递归定义最优解的值 3- 计算最优解的值,通常采用自底向上的方法 4- 利用计算出的信息构造一个最优解 1- 问题描述 Serling 公司购买长钢条,将其切割为锻钢条出售。切割工序本身没有成本支出。公司管理层希望知道最佳的切割方案。 假定我们知道Serling公司出售一段长度为i英寸的钢条的价格为pi(i = 1, 2,…,单...

心之所向,敝履以往 2458

钢条切割问题(动态规划)

钢条切割问题(动态规划)

qq_52042398的博客 1087

动态规划——钢条切割最优解算法

最优价格表 钢条长度 1 2 3 4 5 6 7 8 9 10 钢条价格 1 5 8 9 ...

weixin_44003309的博客 1904

动态规划-钢条切割

动态规划 简介 目的:求解最优解问题; 思想:组合子问题的解来求解原问题; 一. 可以解决哪些问题: 1. 问题的目标是求解一个问题的最优解; 2. 整体问题的最优解依赖于各个子问题的最优解; 3. 大问题分解成若干小问题,且这些小问题还可能继续分解为若干更小的问题; 4. 从上向下分析问题,从下向上解决问题。 二. 设计动态规划的方法: 刻画一个最优解结构特征: 即要求满足题目要求的解的特征;...

nuist_Jiang的博客 1452

Python实现动态规划切割钢条问题

该题目来自《算法导论》书中动态规划一章的实例,书上用的是伪代码实现。 切割钢条问题的描述: http://www.cnblogs.com/mengwang024/p/4342796.html 以下是我的python实现: price = [0, 1, 5, 8, 9, 10, 14, 17, 20, 24, 30] cut_point = [] def cut_rod(length)

micheal_yejinglin的专栏 2963

动态规划: 钢条切割的三种解法

/* 钢条切割 不同长度的钢条对应不同的价格 给定一定长度的钢条,怎样切割利益最大 注意: 最优解可能是完全不需要切割 */ #include &amp;lt;vector&amp;gt; #include &amp;lt;iostream&amp;gt; using namespace std; //给定长度从1到10对应的不同价格 vector&amp;lt;int&amp;gt; price{0, 1, 5, 8, 9, 10, 1...

weixin_36888577的博客 977

动态规划之钢条切割问题

动态规划解决钢条切割收益最大化的问题,使用了带备忘录的自顶向下和自底向上两种方法

钢条切割-【算法导论-动态规划】

对以上的价格表样例,进行模拟切割: r1 = 1,切割方案1 = 1(无切割) r2 = 5,切割方案2 = 2(无切割) r3 = 8, 切割方案3 = 3(无切割) r4 = 10, 切割方案4 = 2 + 2 r5 = 13, 切割方案5 = 2 + 3 r6 = 17, 切割方案6 = 6(无切割) r7 = 18, 切割方案7 = 1 + 6或7 = 2 + 2 + 3 r8 = 22, 切割方案8 = 2 + 6 r9 = 25, 切割方案9 = 3 + 6 r10 = 30,切割方案10 = 10(无切割) 可能现在大家对这种切割比较不耐烦,或者是有的数并不是那么好,怎么办? 这时有个很好的思想,就是动态规划,之前模拟切割尽管结果出来的很简单,但是过程却依然很复杂; 比如r7,它有很多切割方案,1-6,2-5,3-4,2-2-3,1-1-5等等,这些过程如何自己来模拟的话实在是太费时间,但是我们想在切割7的时候前面都已经完成了,我们可以在前面的基础上进行切割,这时只要考虑1-6,2-5,3-4即可,比如现在的1-6就包括了之前的1-1-5,1-2-4等的切割方案;

计算机组成原理实验二 运算器组成实验

事实上,ALU的设计是在全加器的基础上,对全加器功能的扩展来实现符合要求的多种算术/逻辑运算的功能。为了实现多种功能的运算,An、Bn数据是不能直接与全加器相连接的,它们受到功能变量F3—F1的制约,因此,可由An、Bn数据和功能变量F3-F1组合成新的函数Xn 、Yn,然后,再将Xn 、Yn和下一位进位Cn-1通过全加器进行全加运算以实现所需的运算功能。AC寄存器可用来存储ALU的输入以实现两个操作数的运算操作,也可以用来存储来自ALU的结果,以将这些结果反馈给ALU以进行更多的处理。

qq_63574533的博客 1448

OpenPose 论文理解

OpenPose: Real-time multi-person keypoint detection library for body, face, hands, and foot estimation paper: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields link: OpenPose paper...

JustForYou的博客 2万+

攻克Windows平台3DGS复现:从环境配置到可视化实战全记录

本文详细记录了在Windows平台成功复现3D Gaussian Splatting(3DGS)的完整流程,涵盖从环境配置、依赖安装、数据准备到模型训练与可视化的全步骤。重点解决了Windows下CUDA版本匹配、Visual Studio编译及SIBR_viewers可视化工具部署等核心难题,为开发者提供了一份详实的避坑指南与实战手册。

weixin_28839699的博客 251

从时序参数到电压供给:TTL(RGB)液晶屏驱动调试全解析

本文全面解析TTL(RGB)液晶屏驱动调试的关键技术,从时序参数配置到电压供给系统搭建,详细介绍了同步信号参数、寄存器配置技巧以及升压电路设计。通过实战案例和常见故障分析,帮助工程师快速掌握液晶显示屏调试方法,提升开发效率。

weixin_30588675的博客 247

CATIA CAA 二次开发去除面内开孔

测试模型: 代码说明:以下代码在拓扑级去除Face的内部loop,更改后的Body通过oispBody参数输出。主要使用CATSmartBodyDuplicator拓扑操作实现 HRESULT CAAStarterCmd::RemoveHoleOnFace(CATBody_var &ispBody,CATBody_var &oispBody){ CATLISTP(CATCell)olistFace; ispBody->GetAllCells(olistFace,2); CATF

weixin_45445751的博客 2264

【STM32】基于STM32F103C8T6实现步进电机精准调速控制

本文详细介绍了如何使用STM32F103C8T6微控制器实现步进电机的精准调速控制。通过利用其内置定时器生成PWM脉冲,替代低效的延时方法,并结合TB6600驱动器进行硬件连接,可实现平滑、高效的电机速度控制。文章提供了基于HAL库的代码实战,包括速度与方向设置函数,并探讨了加减速规划等高级应用,帮助开发者彻底掌握步进电机驱动技术。

weixin_29169899的博客 484

手把手教你用RTL8306MB搭建小型网络交换机:从原理到实战

本文详细介绍了如何使用RTL8306MB交换芯片从零搭建小型网络交换机的全过程。内容涵盖芯片原理分析、核心硬件电路设计(包括电源、时钟、RMII接口连接要点)、驱动开发与SMI通信实现,以及从物理链路到交换功能的系统调试实战。重点解析了将MAC5配置为RMII PHY模式与CPU对接的关键步骤和常见错误,帮助嵌入式开发者深入理解网络交换原理并完成实践。

weixin_29274969的博客 192

Python爬虫:爬取健身平台运动数据(跑步、骑行轨迹)

通过分析这些运动数据,用户能够了解自己的运动趋势、运动成绩,并作出相应的调整。通过使用Strava的API,我们成功地获取了用户的运动活动信息和运动轨迹数据,并进行了存储与可视化。Strava的API提供了丰富的数据接口,能够通过OAuth2认证获取用户的运动数据,包括历史数据、运动轨迹等信息。Strava的API还提供了获取活动轨迹数据的接口,返回的数据格式通常是GeoJSON格式,适用于地图可视化。随着大数据技术的发展,运动数据的分析和可视化为个人健康管理、运动训练计划的优化等提供了强大的支持。

2201_76125261的博客 1074

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 如何挑选合适的大数据或Hadoop平台?
下一篇: Git简介
CrazyJMonkey
博客等级 码龄14年 7粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值