- 博客(53)
- 收藏
- 关注
原创 软件构造blog合集
git ssh: connect to host github.com port 22: Connection timed out 无以及法clone利用jar 配置log4j2 和 slf4jArrayList 源码分析Java ArrayList的Iterator源码解析从实例分析如何提升软件可复用性和可维护性(软件构造实验的遗憾)Java List Collections.unmodifiableList 与 表示泄露单例模式笔记synchronized 与死锁...
2020-07-10 22:46:07
221
原创 synchronized 与死锁
在进行多线程编程时,死锁是我们一定要进行判断和避免的。本篇博客介绍一下synchronized的死锁内容。synchronized介绍synchronized是常见的锁。常见用法如下:synchronized (A) { ... ... ...}它可以保证花括号内的所有代码是原子执行的。但我们要注意的是,sychronized锁定的对象不是代码段。sychronized锁定的实际上是一个类或者对象(A)。每个对象只能由一个线程占用锁。在执行由sychronized包含的
2020-07-10 22:40:17
539
原创 单例模式笔记
我们在使用状态模式进行编程时,状态往往可以利用单例模式进行编写。这篇文章介绍一下什么是单例模式以及如何实现。何时需要单例模式当我们在程序很多的地方都需要用到某个完全相同的类时,我们就可以利用单例模式来帮助我们节省空间。单例模式可以保证程序中单例类只有一个对象。例如我们利用状态模式进行编程,一个状态可能有很多的对象需要使用,那么状态就可以利用单例模式来进行实现。如何实现单例模式饿汉法这个是比较容易想到的方案public class Single { private static Sing
2020-07-10 20:27:58
279
原创 Java List Collections.unmodifiableList 与 表示泄露
表示泄露:对于一个ADT来说,表示泄露是一项要坚决避免的事情。我们会采用包括但不限于private final、防御式拷贝等方式来避免表示泄露。今天我想讨论一下和List有关的表示泄露问题。常规方式:1.防御式拷贝:在传入List或返回List时,我们可以采用防御式拷贝的方式避免List的别名从而避免表示泄露。这种方法的问题在于2.List如果List当中存放的是Immutable类型的数据,我们就可以采用...
2020-07-10 18:13:26
355
原创 从实例分析如何提升软件可复用性和可维护性(软件构造实验的遗憾)
在大学的软件构造类似的课程中,我们了解过很多的设计模式,然而如何在一个具体实例中选择合适的设计模式是一个难题(困扰了我很久)。这次我通过实验中的一个较为复杂的例子来说明一下设计的心路历程。问题说明在这里,我简要提炼一下实验要求,挑选一部分侧重点来进行讨论。本次实验要求设计一组计划项管理的ADT可以对计划项进行:分配资源、启动、挂起、取消、停止等操作。每个计划项需要占用一定的资源和地址。要求能够实现下列5种不同的计划项:航班、高铁、进程、课程、活动。可以看出对于不同的计划项,他们在资源数量、
2020-07-10 14:50:40
937
原创 Java ArrayList的Iterator源码解析
Iterator是一个非常重要的遍历List的工具,再利用迭代器进行增删改时,往往会产生意想不到的bug,因此我们从源码来理解一下ArrayList的Iterator实现。repprivate class Itr implements Iterator<E> { int cursor; // index of next element to return int lastRet = -1; // index of last element retu
2020-07-09 18:15:55
291
原创 ArrayList 源码分析
前言本文从JDK1.8源码的角度简要分析一下ArrayList的常用方法以及扩容机制,帮助我们更好的使用这个常见的集合类实现。rep private static final long serialVersionUID = 8683452581122892189L; /** * 默认容量 */ private static final int DEFAULT_CAPACITY = 10; /** * Shared empty array ins
2020-06-12 18:32:01
224
原创 利用jar 配置log4j2 和 slf4j
文章内容:介绍如何利用jar包而不用maven配置log4j2 和 slf4j(有些同学的课程实验可能有这种要求)介绍为什么选择log4j2和slf4j利用jar配置log4j2 和 slf4j需要下载以下四个包:在https://logging.apache.org/log4j/2.x/download.html中下载压缩包,在压缩包中选择:log4j-api-2.13.3.jarlog4j-core-2.13.3.jar (这两个是log4j2必备的)log4j-slf4j-imp
2020-06-12 14:36:28
852
1
原创 深度学习作业L5W3(2):Improvise a Jazz Solo with an LSTM Network
构建一个识别触发语言的模型(siri)数据构建我们手里有:背景音正例音(符合trigger word)反例音 (不符合trigger word)我们把正例音和反例音随机插在背景音当中作为训练集数据,同时如下设置标签:在每个正例音结束之后,将一定时间段的y值设为1(增加1的个数提高学习效果)判断时间段是否冲突# GRADED FUNCTION: is_overlappingdef is_overlapping(segment_time, previous_segments): ""
2020-05-26 00:41:59
365
1
原创 深度学习作业L5W3(1):Neural Machine Translation
利用attention模型构造一个日期翻译模型(将各种日期描述翻译成YYYY-MM-DD)基本单元是字母,所以不需要embeddingattention计算首先利用RepeatVector复制状态s(输出层LSTM状态值),利用Concatenate将s和a(处理层LSTM输出值)组合,在利用两层densor和一个softmax求出atteition矩阵,利用Dot层进行矩阵乘法求出输出层LSTM的输入值全局变量# Defined shared layers as global variable
2020-05-26 00:33:08
234
原创 深度学习作业L5W2(2):Emojify!
任务:给定一句话,判断符合5个表情中的哪一个,属于一个多对一问题本次实验的embedding已经给出平均值策略把一句话的所有单词embedding加在一起求平均值,然后一个sortmax解决问题这样做没有利用到句子的顺序,而且一句话如果说了很多love但实际上是在骂人,那么可能会因为love比较多而选择较为积极的表情# GRADED FUNCTION: sentence_to_avgdef sentence_to_avg(sentence, word_to_vec_map): """
2020-05-26 00:22:09
246
原创 深度学习作业L5W2(1):Operations on word vectors
利用已经训练好的word embedding,进行判断词相似度、word analogy、以及除去性别歧视偏差等操作cosine相似度# GRADED FUNCTION: cosine_similaritydef cosine_similarity(u, v): """ Cosine similarity reflects the degree of similariy between u and v Arguments: u -- a wo
2020-05-26 00:09:13
239
原创 深度学习作业L5W1(3):Improvise a Jazz Solo with an LSTM Network
利用LSTM创作爵士歌曲数据处理题目已经为我们做好,输入X是(60, 30, 78)的矩阵,代表60个歌曲,每个歌曲分30个时间片,一个时间片对应78个音符中的一个。模型结构一个LSTM上面套一个softmaxLSTM的隐藏状态a为64个n_a = 64 reshapor = Reshape((1, 78)) # Used in Step 2.B of djmodel(), belowLSTM_cell = LSTM(n_a, return_s
2020-05-25 23:56:27
370
原创 深度学习作业L5W1(2):Character level language model - Dinosaurus land
目标:构建一个语言模型,用来生成恐龙名字。(本次实验的最小单元不是单词而是字母)下面截取题目要求我们实现的部分:处理梯度爆炸### GRADED FUNCTION: clipdef clip(gradients, maxValue): ''' Clips the gradients' values between minimum and maximum. Arguments: gradients -- a dictionary containing the
2020-05-25 23:39:13
268
原创 深度学习作业L5W1(1):Building your Recurrent Neural Network - Step by Step
利用numpy实现RNN、LSTM的前向传播和反向传播。主要是为了熟悉基本单元的流程RNN基本单元:# GRADED FUNCTION: rnn_cell_forwarddef rnn_cell_forward(xt, a_prev, parameters): """ Implements a single forward step of the RNN-cell as described in Figure (2) Arguments: xt -- your i
2020-05-25 23:27:50
255
原创 深度学习(21):seq2seq,注意力模型
seq2seqseq2seq在机器翻译等领域十分好用。我们将模型分成两部分,首先构造一个RNN充当encoder,将汉语句子依次作为输入,使其变成一个状态。然后构造一个RNN充当decoder,继承上面的初始状态,生成对应的英语文本。对于decoder部分,我们希望能够输出最有可能的翻译文本。我们直到如果直接选择贪心的方式,每次直接生成最大概率的单词,组合起来的结果可能不是最优的,因此往往采用beam search的方式进行搜索。beam search本质上是一个近似搜索算法,我们规定一个bea
2020-05-24 23:19:20
506
原创 深度学习(20):自然语言处理与词嵌入
word embedding之前我们一直用one-hot的形式来表示每一个词。但是随着单词集的扩充,one-hot的维度会越来越大,而且这样表示不能体现出词的关系。所以这里提出word embeddingword embedding本质上是抓取每个词的各种特征。相当于将m维的one-hot空间的单词映射到n维的特征空间中的值。特征空间满足:具有相似特征(例如水果)的词会聚在一起。具有相同关系的词会呈现出平行四边形的性质(男人、女人;国王、皇后的embedding向量偏差大致相同)训练得到word em
2020-05-24 20:33:08
429
原创 深度学习(19):循环序列模型
引言在之前我们学习的各种内容中(图像识别啊,分类问题啊),我们的输入在时间上没有先后顺序。然而在语音识别、自然语言处理当中,我们的各项输入是有先后顺序的。(例如句子当中词的先后顺序,声音来源的先后顺序)为了捕获这种时间顺序相关的特征,我们引入循环序列模型。one hot 表示在自然语言处理当中,如何对每一个单词进行表示是一个重要问题。在这里我们采用one-hot表示方法。假如我们训练的模型当中词汇量为3个,那么我们对三个单词分别编码为:[1, 0, 0][0, 1 ,0][0, 0, 1]可
2020-05-24 11:46:50
617
原创 深度学习作业L4W4(2)Art Generation with Neural Style Transfer
主题:风格转换下面只列出实验中需要编写的代码以及我认为的细节。计算内容代价函数# GRADED FUNCTION: compute_content_costdef compute_content_cost(a_C, a_G): """ Computes the content cost Arguments: a_C -- tensor of di...
2020-05-05 21:42:33
339
原创 深度学习作业L4W4(1):Face Recognition for the Happy House
主题:人脸识别triplet loss# GRADED FUNCTION: triplet_lossdef triplet_loss(y_true, y_pred, alpha = 0.2): """ Implementation of the triplet loss as defined by formula (3) Arguments: y_...
2020-05-05 21:31:26
197
原创 深度学习(18):人脸识别、风格转换
人脸验证 fave verification人脸验证 fave verification人脸验证指的是给出一张人脸图片,再给出一个目标ID,我们来确认图片是否属于这个ID人脸识别 face recognition人脸识别指的是给出一张人脸图片,已知一组ID,判断这张图片是否属于这一组ID中的一个任务难点:往往在实际应用中,我们数据库中一个人只有1张图片,数据较少。(训练时需要一个人有多个...
2020-05-05 21:14:42
622
原创 深度学习作业L4W3:Autonomous driving application - Car detection - v1
本次实验主要编写yolo网络得出结果后如何获取输出过滤注释写在代码里面# GRADED FUNCTION: yolo_filter_boxesdef yolo_filter_boxes(box_confidence, boxes, box_class_probs, threshold = .6): """Filters YOLO boxes by thresholding on ...
2020-05-05 15:30:12
318
原创 深度学习(17):目标检测
目标定位我们已经了解了简单的图像分类问题,即判断一个图片里有没有物体A。我们的神经网络输出往往只是1个数字,代表出现物体A的概率p。对于目标定位问题,我们除了要判断有没有物体A,还要圈出A的位置。这时候我们的输出就不应该只有p,还应该标注A的位置。因此对应目标定位问题,我们要同时输出:出现物体的概率、物体的位置信息、物体的种类信息。才能完成一个多目标定位。特征点检测有时候我们需要检测出图...
2020-05-05 15:02:10
663
原创 深度学习作业L4W2(2):Residual Networks - v1
利用keras实现一个残差网络模块构建# GRADED FUNCTION: identity_blockdef identity_block(X, f, filters, stage, block): """ Implementation of the identity block as defined in Figure 3 Arguments: ...
2020-05-05 07:34:19
249
原创 机器学习作业L4W2(1):Keras - Tutorial - Happy House v1
实验目的:熟悉keras(基于tensorflow的api)构建模型# GRADED FUNCTION: HappyModeldef HappyModel(input_shape): """ Implementation of the HappyModel. Arguments: input_shape -- shape of the images...
2020-05-05 07:29:02
263
原创 深度学习(16):深度卷积神经网络:实例探究
三个经典网络LeNet-5一个十分经典网络,处理任务是手写数字的识别。采用如下结构:输入层:32 * 32 * 1灰度图卷积层(C1):6个 5 * 5 过滤器,步长为1,得到28 * 28 * 6的输出池化层(S1):(平均池化)过滤器 2 * 2,步长为2, 输出14 * 14 * 6卷积层(C2):16个 5 * 5 过滤器,步长为1,得到10 * 10 * 16的输出...
2020-05-05 06:08:58
476
原创 深度学习作业L4W1(2):Convolution model - Application - v1
利用tensorflow实现卷积神经网络placeholder# GRADED FUNCTION: create_placeholdersdef create_placeholders(n_H0, n_W0, n_C0, n_y): """ Creates the placeholders for the tensorflow session. Argum...
2020-05-04 06:57:53
499
1
原创 深度学习作业L4W1(1):Convolution model - Step by Step - v1
本次实验主要是利用numpy实现卷积神经网络前向传播和反向传播的过程以加深理解。padding# GRADED FUNCTION: zero_paddef zero_pad(X, pad): """ Pad with zeros all images of the dataset X. The padding is applied to the height and wid...
2020-05-04 06:20:24
958
原创 深度学习(15):卷积神经网络
本文以图像分类为例简要介绍卷积神经网络的基本结构。卷积过滤器(核):过滤器是我们用来卷积的工具。对于一张图片,我们可以利用过滤器来抓取图片的某些特征。一个过滤器是一个 f * f 的矩阵, 其中的每一个元素都是可训练的参数。我们假设现在有一个6 * 6的灰度图,3 * 3的过滤器,那么卷积的过程如下:1.将过滤器覆盖在图片的左上角,计算9个位置对应元素的乘积并加和作为一个输出2.将过...
2020-05-03 19:34:34
516
原创 深度学习(14):对于贝叶斯误差的一点疑惑
贝叶斯误差是我们学习模型的天花板,我们用贝叶斯误差和训练集误差进行比较来确定我们是否还拥有可避免偏差,是否有优化的空间,以及是否过拟合。这里可以看出,只有承认训练集误差代表模型对真实数据的误差才能和贝叶斯误差进行比较。然而对于训练集的误差我有些疑惑(下面我仍按猫识别问题进行分析):1.我们假设我们的训练集是完全正确的。那么我们的训练集误差的确代表了真实误差。可是由于贝叶斯误差的存在,我们用尽...
2020-04-26 17:29:19
1233
原创 深度学习(13):机器学习策略(2)
误差分析当我们发现验证集和训练集误差比人工误差大很多时,我们认为此时存在可避免偏差,可以优化。这时候对产生误差的原因进行分析有助于我们的下一步迭代。例如对于猫图片分类器,通过观察验证集上的错误我们发现,80%的错误来源都是把狗看成了猫,这就启发我们针对狗进行优化(多找一些狗的图片、设计狗相关的算法等)可能会使我们的错误率降低80%。在分析误差时,我们可以并行的分析很多因素,也可能会找到共性的新...
2020-04-25 23:10:33
378
原创 深度学习(12):机器学习策略(1)
机器学习的过程是高度迭代的过程。我们往往需要定期对模型进行修改以提升模型性能。然而一次错误的决策可能使我们白白浪费几周甚至几个月的时间。因此机器学习策略很关键。机器学习的一般性步骤如下:1.在训练集上获得良好表现2.跟据dev验证集选择模型,并获得良好表现3.确定模型后在test测试集上获取良好表现4.在实际应用中获得良好表现。正交化正交化是指我们对模型的某一处修改,只应该影响模型单...
2020-04-25 09:58:38
521
原创 深度学习作业L2W3:Tensorflow Tutorial
本次实验了解Tensorflow这个强大的框架。使用Tensorflow框架的好处是,只需要编写前向传播和损失函数,反向传播框架会帮我们自动完成。一个tensorflow模型的大体结构:##参数形状设置W1 = tf.get_variable(...).....##训练集输入设置X=tf.placeholder(...)Y=......##前向传播计算图搭建tf.matmul...
2020-04-19 18:11:03
301
原创 深度学习(11):softmax回归
开门见山,softmax是logistic回归在多分类问题上的升级版多分类问题的y值对于二分类问题,我们用y=0或1就可以加以区分。对与C分类问题,我们用一个(C,1)的矩阵代表y值,例如对于一个3分类问题:[[0], [1], [0]]代表该物体属于第二类我们在logistic回归中,y_hat表示元素为1的可能性,因此对于softmax,输出的第i行数值代表着该物体为第i类的可能性。所以...
2020-04-19 17:51:05
144
原创 深度学习(10):Batch Norm Batch归一化
在之前的学习中,我们知道对于训练集X进行归一化有利于我们把代价函数从扁平拉圆,便于我们训练。那我们想一下,如果对每层神经网络的输出,我都搞一个归一化,是不是会提升我们的学习效果呢?Batch Norm技术就出现了实现方式对于之前的每个神经元,我们计算z=wTa_pre, a=g(z)。在Batch Norm中,对于每一层神经元:z=wTa_pre (没有b的原因是反正都要归一化...
2020-04-19 17:29:56
457
原创 深度学习(9):超参数调试
如果我们采用一个Adam梯度下降法,将会有学习率、网络层数、每层神经元个数、beta1、beta2等等超参数需要我们调整。面对这么多排列组合的可能性,我们需要采用适当的超参数选取策略。1.超参数重要性排列(吴恩达老师个人意见)t0:学习率t1:momentum的beta,隐藏层节点数、mini_batch大小t2:网络层数、learning_rate_decay(学习率衰减参数)t3(不...
2020-04-19 16:51:47
351
原创 深度学习作业L2W2:Optimization methods
本次实验主要介绍L2第二周的各项优化技术的实现。batch梯度下降简单的batch梯度下降更新公式为w = w - learning_rate*dw# GRADED FUNCTION: update_parameters_with_gddef update_parameters_with_gd(parameters, grads, learning_rate): """ ...
2020-04-18 23:51:59
268
原创 深度学习(8):Momentum RMSprop Adam 学习率衰减
指数加权平均对于一个序列a[1],a[2]…a[3]我们定义一个数组v[], 其中v[i]= beta*v[i-1] + (1-beta)*a[i]这个v就叫做a的指数加权平均值可以直观的理解为v[i]代表着a[i]之前的1/(1-beta)组数据的平均值,例如beta为0.9时,v[n]近似代表着v[n-9]-v[n]的平均值Momentum梯度下降法对于简单的梯度下降法我们如下更...
2020-04-18 23:30:52
1059
原创 深度学习(7):Mini-batch梯度下降法
batch梯度下降法在前面的学习当中,对于神经网络的每次迭代,我们都是以整个训练集X为单元进行训练。这种训练方法也叫batch梯度下降法。由于跑完整个X后才能更新参数,当数据量较大时,每次迭代的时间会非常长。batch梯度下降法的代价函数一定会严格递减。为例减小每次跌打的时间,我们试图缩小每次迭代的数据量随机梯度下降法在这个方法中,我们每次迭代只训练一组数据,然后就更新参数。这样做的...
2020-04-18 22:50:50
574
原创 深度学习作业L2W1(3):Gradient Checking
本次实验主要涉及梯度检验。简单函数的梯度检验f(x)=theta*x# GRADED FUNCTION: forward_propagationdef forward_propagation(x, theta): """ Implement the linear forward propagation (compute J) presented in Figure 1 (...
2020-04-18 16:39:26
276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人