谈一下我今天参加完后的感受吧,首先神经网络很重要,他们也很关注这个方面的应用。还有就是很深厚的数学背景,对矩阵,线代,和概率论等知识考察的比较多。

一、简答题

1、目前深度神经网络有哪些成功的应用,简述其适用原因。
看图识别花朵 植物,机器翻译

2、不同进程之间进行通信的方式有哪些?(至少列出三种)

管道(pipe)、命名管道(named pipe)、信号(signal)、信号量(semaphore)、套接字(socket)、消息队列(message queue)、共享内存和内存映射(mapped memeory)。

3、有N个样本,每个样本都是D维的,使用KNN分类算法,采用欧式距离,(1)其时间复杂度为多少?(2)当N很大时,可以使用什么方法进行优化?(3)K的值对预测的方差和偏差的影响是什么?

现在看来N应该是训练集的样本数,时间复杂度是指的分类一个样本需要的时间。

(1)KNN分类的的思想是,计算待分类样本与训练集中所有样本的距离,找出距离最小的k个,计算那个标签出现的次数最多,将出现最多的标签作为样本的标签。计算距离的复杂度是O(M*D),排序最快得是O(M*log(M)),找出现最多的标签的复杂度是K。因此总的时间复杂度是O(N*D+N*log(N)+K))。

(2)KNN比较费时的步骤在于要计算与训练集中每一个样本的距离,为了减少计算量,可以每次从训练集中随机地选取一部分样本进行,作为分类的依据。假设每次取T个点,则时间复杂度变为O((T*D+T*log(T)+K))。当N很大时,选取的T可以远远小于N。

(3)记样本的真实标签为Y,分类结果记为X,X是随机变量,可以取训练集中所有出现的类标签。

如果K=N,则任意Y,X|Y=训练集中包含样本数最多的类的标签。

如果K=1,则分类结果是离待分类样本最近的训练集中的样本的类的标签。

现在,仍然没有梳理出这里的方差和偏差指的是什么?
Continue reading

  1. BP算法中,输出层节点的误差计算与隐层节点的误差计算是不同的,输出层节点的误差计算公式为 1,隐层节点的误差计算公式为 2 。

 

2.   学校图书馆共有300万册图书,想统计其中Computer,Science,计算机,科学这几个词出现的次数,并按照自然年度分类,如2016年出版的书籍中这几个词各自出现的次数,2015年······依次类推。

将每本书都存在hdfs里作为一个文件,文件名为 时间(4位年份)+书的id+书的名称。
使用mapreduce进行运算,map输出为<日期,computer次数;science次数;计算机次数;科学次数>,reduce输出同样,不过作为value的字符串中的次数为总次数。代码如下:
    public static class MyMapper extends Mapper<LongWritable,Text,Text,Text>{       
        
        private static Text outputKey = new Text();
        private static Text outputValue = new Text();
   
        @Override
        protected void map(LongWritable key, Text value, Context context)
                throws IOException, InterruptedException { 
        //得到hdfs文件名
        String filename = ((FileSplit) context.getInputSplit()).getPath().getName();
        String date = filename.substring(0, 4);
       
        //分别统计computer,science,计算机,科学出现的次数
        int computer = 0;
        int science = 0;
        int jisuanji = 0;
        int kexue = 0;
       
        String line = value.toString();
        String[] words = line.split(" ");
        for(String s:words){
        if(s.equals("computer")) computer++;
        if(s.equals("science")) science++;
        if(s.equals("计算机")) jisuanji++;
        if(s.equals("科学")) kexue++;
        }
       
        String outputVal = "" + computer + ";" + science + ";" + jisuanji + ";" + kexue;
        outputKey.set(date);
        outputValue.set(outputVal);
        context.write(outputKey, outputValue);
                             
        }
  }
    
    public static class MyReducer extends Reducer<Text, Text, Text, Text> {

    @Override
protected void reduce(Text key, Iterable<Text> values,Context context)
throws IOException, InterruptedException {
    int allComputer = 0;
    int allScience = 0;
    int allJisuanji = 0;
    int allKexue = 0;
   
    for(Text value:values){
    String val = value.toString();
    String[] str = val.split(";");
    allComputer += Integer.parseInt(str[0]);
    allScience += Integer.parseInt(str[1]);
    allJisuanji += Integer.parseInt(str[2]);
    allKexue += Integer.parseInt(str[3]);
    }
   
    String finalVal = "" + allComputer + ";" + allScience + ";" + allJisuanji + ";" + allKexue;
    context.write(key, new Text(finalVal));    
    } 
  }

Continue reading

每个技术

工作中的技术需求 的技术场景
帮助小白用户 和 在考试成绩遇到瓶颈 , 以及 效率底下的用户

用到的算法
模型
seq2seq
LSTM

算法原理

算法的输入 输出(输入如何得到,输出如何评价,输出如何应用到现实场景里面)

原始输入: 平时积累的预料回答内容, 网站拍取的习题问答 和 做题经验内容
数据第一阶段输出: Cornell数据集

定义输入值 接着定义网络的输入值,根据标准的seq2seq模型,一共四个:
1. encorder的输入:人物1说的一句话A,最大长度10 2. decoder的输入:人物

2回复的对话B,因为前后分别加上了go开始符和end结束符,最大长度为12

3. decoder的target输入:decoder输入的目标输出,与decoder的输入一样但只有end标示符号,可以理解为decoder的输入在时序上的结果,比如说完这个词后的下个词的结果。

4. decoder的weight输入:用来标记target中的非padding的位置,即实际句子的长度,因为不是所有的句子的长度都一样,在实际输入的过程中,各个句子的长度都会被用统一的标示符来填充(padding)至最大长度,weight用来标记实际词汇的位置,代表这个位置将会有梯度值回传。

深度学习
RNN
构建RNN 代码:

def create_rnn_cell():
    encoDecoCell = tf.contrib.rnn.BasicLSTMCell(  # Or GRUCell, LSTMCell(args.hiddenSize)
        self.args.hiddenSize,
    )
    if not self.args.test:  # TODO: Should use a placeholder instead
        encoDecoCell = tf.contrib.rnn.DropoutWrapper(
            encoDecoCell,
            input_keep_prob=1.0,
            output_keep_prob=self.args.dropout
        )
    return encoDecoCell

encoDecoCell = tf.contrib.rnn.MultiRNNCell(
    [create_rnn_cell() for _ in range(self.args.numLayers)],
)

 

 

LSTM

算法原理

算法的输入 输出(输入如何得到,输出如何评价,输出如何应用到现实场景里面)

原始输入: 平时积累的预料回答内容, 网站拍取的习题问答 和 做题经验内容
数据第一阶段输出: Cornell数据集

定义输入值 接着定义网络的输入值,根据标准的seq2seq模型,一共四个:
1. encorder的输入:人物1说的一句话A,最大长度10 2. decoder的输入:人物

2回复的对话B,因为前后分别加上了go开始符和end结束符,最大长度为12

3. decoder的target输入:decoder输入的目标输出,与decoder的输入一样但只有end标示符号,可以理解为decoder的输入在时序上的结果,比如说完这个词后的下个词的结果。

4. decoder的weight输入:用来标记target中的非padding的位置,即实际句子的长度,因为不是所有的句子的长度都一样,在实际输入的过程中,各个句子的长度都会被用统一的标示符来填充(padding)至最大长度,weight用来标记实际词汇的位置,代表这个位置将会有梯度值回传。
Continue reading

在系统级修改 Python 版本
我们可以使用 update-alternatives 来为整个系统更改 Python 版本。以 root 身份登录,首先罗列出所有可用的 python 替代版本信息:

# update-alternatives –list python
update-alternatives: error: no alternatives for python
如果出现以上所示的错误信息,则表示 Python 的替代版本尚未被 update-alternatives 命令识别。想解决这个问题,我们需要更新一下替代列表,将 python2.7 和 python3.4 放入其中。

# update-alternatives –install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: using /usr/bin/python2.7 to provide /usr/bin/python (python) in auto mode
# update-alternatives –install /usr/bin/python python /usr/bin/python3.4 2
update-alternatives: using /usr/bin/python3.4 to provide /usr/bin/python (python) in auto mode
–install 选项使用了多个参数用于创建符号链接。最后一个参数指定了此选项的优先级,如果我们没有手动来设置替代选项,那么具有最高优先级的选项就会被选中。这个例子中,我们为 /usr/bin/python3.4 设置的优先级为2,所以 update-alternatives 命令会自动将它设置为默认 Python 版本。

# python –version
Python 3.4.2
接下来,我们再次列出可用的 Python 替代版本。

# update-alternatives –list python
/usr/bin/python2.7
/usr/bin/python3.4
现在开始,我们就可以使用下方的命令随时在列出的 Python 替代版本中任意切换了。

# update-alternatives –config python