CS224d assignment 1【Neural Network Basics】
refer to:
机器学习公开课笔记(5):神经网络(Neural Network)
深度学习与自然语言处理(4)_斯坦福cs224d 大作业测验1与解答
softmax:
- def softmax(x):
- assert len(x.shape) > 1
- x -= np.max(x, axis=1, keepdims=True)
- x = np.exp(x) / np.sum(np.exp(x), axis=1, keepdims=True)
- return x
sigmoid & sigmoid_grad:
- def sigmoid(x):
- result = 1.0 / (1.0 + np.exp(-x))
- return result
- def sigmoid_grad(f):
- f=f*(1.0-f)
- return f
gradcheck_naive:
- def gradcheck_naive(f, x):
- """
- Gradient check for a function f
- - f should be a function that takes a single argument and outputs the
- cost and its gradients
- - x is the point (numpy array) to check the gradient at
- """
- rndstate = random.getstate()
- random.setstate(rndstate)
- fx, grad = f(x) # Evaluate function value at original point
- h = 1e-4
- # Iterate over all indexes in x
- it = np.nditer(x, flags=['multi_index'], op_flags=['readwrite'])
- while not it.finished:
- ix = it.multi_index
- ### try modifying x[ix] with h defined above to compute numerical gradients
- ### make sure you call random.setstate(rndstate) before calling f(x) each
- ### time, this will make it
- ### possible to test cost functions with built in randomness later
- ### YOUR CODE HERE:
- old_val = x[ix]
- x[ix] = old_val - h
- random.setstate(rndstate)
- ( fxh1, _ ) = f(x)
- x[ix] = old_val + h
- random.setstate(rndstate)
- ( fxh2, _ ) = f(x)
- numgrad = (fxh2 - fxh1)/(2*h)
- x[ix] = old_val
- ### END YOUR CODE
- # Compare gradients
- reldiff = abs(numgrad - grad[ix]) / max(1, abs(numgrad), abs(grad[ix]))
- if reldiff > 1e-5:
- print "Gradient check failed."
- print "First gradient error found at index %s" % str(ix)
- print "Your gradient: %f \t Numerical gradient: %f" % (grad[ix], numgrad)
- return
- it.iternext() # Step to next dimension
- print "Gradient check passed!"
neural.py
- import numpy as np
- import random
- from q1_softmax import softmax
- from q2_sigmoid import sigmoid, sigmoid_grad
- from q2_gradcheck import gradcheck_naive
- def forward_backward_prop(data, labels, params, dimensions):
- """
- Forward and backward propagation for a two-layer sigmoidal network
- Compute the forward propagation and for the cross entropy cost,
- and backward propagation for the gradients for all parameters.
- """
- ### Unpack network parameters (do not modify)
- ofs = 0
- Dx, H, Dy = (dimensions[0], dimensions[1], dimensions[2])
- W1 = np.reshape(params[ofs:ofs+ Dx * H], (Dx, H))
- ofs += Dx * H
- b1 = np.reshape(params[ofs:ofs + H], (1, H))
- ofs += H
- W2 = np.reshape(params[ofs:ofs + H * Dy], (H, Dy))
- ofs += H * Dy
- b2 = np.reshape(params[ofs:ofs + Dy], (1, Dy))
- N, D = data.shape
- # data --> N x D
- # W1 --> D x H
- # b1 --> 1 x H
- # W2 --> H x V
- # b2 --> 1 x V
- # labels --> N x V
- ### YOUR CODE HERE: forward propagation
- Z1 = np.dot(data, W1) + b1 # N x H
- A1 = sigmoid(Z1) # N x H
- Z2 = np.dot(A1, W2) + b2 # N x V
- A2 = softmax(Z2) # N x V
- # cross entropy cost
- #first method
- #B = np.exp(Z2) # N x V
- #b = np.sum(B, axis=1) + 1e-8 # N x 1
- #z = np.log(b) # N x 1
- #cost = np.sum(z) - np.sum(Z2 * labels)
- #cost /= N
- #second method
- cost = - np.sum(np.log(A2[labels == 1]))/N
- ### END YOUR CODE
- #cost = b2[0,-1]
- ### YOUR CODE HERE: backward propagation formula:
- delta2 = A2 - labels # N x V delta2=A2-y
- gradb2 = np.sum(delta2, axis=0) # 1 x V gradb2<--delta2
- gradb2 /= N # 1 x V
- gradW2 = np.dot(A1.T, delta2) # H x V gradW2=A1.T*delta2
- gradW2 /= N # H x V
- delta1 = sigmoid_grad(A1) * np.dot(delta2, W2.T)# N x H delta1=f'(A1)*delta2*W2.T
- gradb1 = np.sum(delta1, axis=0) # 1 x H gradb1<--delta1
- gradb1 /= N # 1 x H
- gradW1 = np.dot(data.T, delta1) # D x H gradW1=X.T*delta1
- gradW1 /= N # D x H
- ### END YOUR CODE
- ### Stack gradients (do not modify)
- grad = np.concatenate((gradW1.flatten(), gradb1.flatten(),
- gradW2.flatten(), gradb2.flatten()))
- return cost, grad
- def sanity_check():
- """
- Set up fake data and parameters for the neural network, and test using
- gradcheck.
- """
- print "Running sanity check..."
- N = 20
- dimensions = [10, 5, 10]
- data = np.random.randn(N, dimensions[0]) # each row will be a datum 20*10
- labels = np.zeros((N, dimensions[2]))
- for i in xrange(N):
- labels[i,random.randint(0,dimensions[2]-1)] = 1 #one-hot vector
- params = np.random.randn((dimensions[0] + 1) * dimensions[1] + (
- dimensions[1] + 1) * dimensions[2], )
- gradcheck_naive(lambda params: forward_backward_prop(data, labels, params,
- dimensions), params)
- if __name__ == "__main__":
- sanity_check()
CS224d assignment 1【Neural Network Basics】的更多相关文章
- 吴恩达《深度学习》-课后测验-第一门课 (Neural Networks and Deep Learning)-Week 2 - Neural Network Basics(第二周测验 - 神经网络基础)
Week 2 Quiz - Neural Network Basics(第二周测验 - 神经网络基础) 1. What does a neuron compute?(神经元节点计算什么?) [ ] A ...
- 【Neural Network】林轩田机器学习技法
首先从单层神经网络开始介绍 最简单的单层神经网络可以看成是多个Perception的线性组合,这种简单的组合可以达到一些复杂的boundary. 比如,最简单的逻辑运算AND OR NOT都可以由多 ...
- Neural Network Basics
在学习NLP之前还是要打好基础,第二部分就是神经网络基础. 知识点总结: 1.神经网络概要: 2. 神经网络表示: 第0层为输入层(input layer).隐藏层(hidden layer).输出层 ...
- 课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)—— 1、10个测验题(Neural Network Basics)
--------------------------------------------------中文翻译---------------------------------------------- ...
- 【DeepLearning学习笔记】Coursera课程《Neural Networks and Deep Learning》——Week2 Neural Networks Basics课堂笔记
Coursera课程<Neural Networks and Deep Learning> deeplearning.ai Week2 Neural Networks Basics 2.1 ...
- XiangBai——【AAAI2017】TextBoxes_A Fast Text Detector with a Single Deep Neural Network
XiangBai--[AAAI2017]TextBoxes:A Fast Text Detector with a Single Deep Neural Network 目录 作者和相关链接 方法概括 ...
- 论文阅读(Weilin Huang——【TIP2016】Text-Attentional Convolutional Neural Network for Scene Text Detection)
Weilin Huang--[TIP2015]Text-Attentional Convolutional Neural Network for Scene Text Detection) 目录 作者 ...
- 论文阅读(Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)
白翔的CRNN论文阅读 1. 论文题目 Xiang Bai--[PAMI2017]An End-to-End Trainable Neural Network for Image-based Seq ...
- 【面向代码】学习 Deep Learning(三)Convolution Neural Network(CNN)
========================================================================================== 最近一直在看Dee ...
随机推荐
- grails框架的g:paginate分页标签的使用
我用到的grails是2.4.4. 该版本下游一个标签g:paginate 该标签下有以下几个参数:total(必须要填写的项).controller.action.prev.max.offset等等 ...
- Flyme适配源码更新命令,轻松完成打包
第一次已经同步了所有源码(花了很长时间),第一次已经连接手机进行了插桩和解reject,那么第二次还需要这么麻烦吗?答案是:NO ! 1.官方源码,执行如下命令可以实现: repo sync -c 2 ...
- java高新技术-操作javaBean
1. 对javaBean的简单内省操作 public class IntroSpectorTest { public static void main(String[] args) throws Ex ...
- Linux 远程复制文件
Linux 远程复制文件 如果想把机器A上面的dir目录下面的所有文件复制到机器B的dir目录下,我们可以使用nc命令来完成 在机器A的dir目录下面执行: tar -czf - * | nc -l ...
- Python之路【第十九篇】自定义分页实现(模块化)
自定义分页 1.目的&环境准备 目的把分页写成一个模块的方式然后在需要分页的地方直接调用模块就行了. 环境准备Django中生成一个APP并且注册,配置URL&Views 配置URL ...
- 1JavaEE应用简介----青软S2SH(笔记)
这本书主要是讲解Struts2,spring,Hibernate框架的, 因为工作中用的较多的是SpringMVC,Struts2用的较少,所以想系统学习一下,就买了这本书. 这本书是青软的,虽然是培 ...
- 【11-23】mysql学习笔记02
SQL的历史 SQL是Structed Query Language 的缩写,即”结构化查询语言” SQL原名是 sequel,后来由于法律原因,改名 SQL最早可以追溯到 1974 年,源于 IBM ...
- 关于Spring中的<context:annotation-config/>配置
当我们需要使用BeanPostProcessor时,直接在Spring配置文件中定义这些Bean显得比较笨拙,例如: 使用@Autowired注解,必须事先在Spring容器中声明AutowiredA ...
- R的卸载和更新安装
R包经常会遇到各种版本不兼容的毛病,比如当前的版本相较于包,新了/旧了都是麻烦 而升级R软件呢,最麻烦的就是之前安装的包怎么办? 搜罗了以下几种方法: 方法1: (1)直接安装新版本 (2)然 ...
- 简单的方向传感器SimpleOrientationSensor
SimpleOrientationSensor是一个简单的方向传感器.能够识别手机如下表的6种方向信息: SimpleOrientation枚举变量 方向 NotRotated 设备未旋转 Rotat ...