Google Innocamp X 华师大 总结
Posted echoworld
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google Innocamp X 华师大 总结相关的知识,希望对你有一定的参考价值。
嗨,大家晚上吼哇~许久没更新的SuperChen今天,,终终终于要更新博客了!都怪自己太懒了。话不多说,今天我要高调秀出自己为期一天的华师大Innocamp之旅~
也算是为周末做个总结了,希望大家能够喜欢
这次Innocamp在华东师范大学举办,主要是教育学院承办,所以主题也就是教育+AI
活动伊始,老师先简单介绍了,人工智能在教育学的简单应用,并着重在如何实现个性化教学与利用机器学习达到教学目标。
这是其中一个比较著名的教学框架ITS结构。
然后紧接着讲了如何利用AI进行学情预测、简化基础业务、通过AI实时反馈学生的听课情况,以及情绪分析。综述讲的比较琐碎,所以我也就大致记了一些概要。
接下来就是重头戏了,代码部分!说实话,这次Camp的代码难度也是一步步慢慢递进的,很适合初学者!接下来我会分几个阶段,慢慢分析
- Python基础
这一部分比较基础,主要是讲了Python的基础结构,元祖切片之类的。虽然基础,但是讲师真的非常nice,一步步分析给我们,赞一个??~
就是这位小哥哥辣,比个心~
Tensorflow基础
这一部分,首先介绍了TensorFlow基本的张量与计算图的概念,然后通过具体代码具体看了一下,具体的步骤应当是:定义Tensor -> 搭建计算图 -> 运行会话Session。所有的机器学习模型也就是建立在搭建计算图之上的。需要注意的是,TensorFlow的主要逻辑是,先定义计算图,全部搭建完成之后再Run Session;而PyTorch则提供了边搭建、边执行的功能,可以说各有优劣吧。运行后的模型可通过tensorboard进行查看(注意先要进行tf.summary.FileWriter(‘./logs/summary‘, sess.graph),把数据写入logs当中)。重要代码在下方展示:最后的结果就是9.0import tensorflow as tf graph = tf.Graph() with graph.as_default(): a = tf.placeholder(tf.float32) b = tf.placeholder(tf.float32) y = tf.multiply(a,b) with tf.Session(graph=graph) as sess: print(sess.run(y,feed_dict={a:3,b:3}))
同样要注意的一点,tensor中所有变量,一旦数据类型确定之后,千万不能用其他类型!例如我之前试了用int赋给float.32,结果直接报错,没有进行类型转换!如果这边报错了,也可以多留意一下数据类型- word2sec模型
word2sec是词向量的表示。词向量可以把情感类似或语义相近的词分类到同一块中。通常,对于一大块的文章分析,可以通过词向量,寻找他们之间的相关关系(例如词汇搭配,上下文关系),通过cross-entropy(交叉熵)的方法,可以捕捉之间的关系(交叉熵是统计学的知识,可以简单了解,通常通过计算熵的关系度量关系),然后根据数值大小进行softmax,统计概率,以0.5为界限,大于就为一方向,否则为另一方向。
简单来说,主要的步骤是:文本预处理函数(去除停用词,出现频繁且意义不大的词称为停用词;读入文件) -> 建立词典(挑选其中最常见的40000个单词,进行map对应,末尾赋为UNK),然后存入到pkl文件 -> 构建训练函数,生成Word2Vec的训练样本(这一步主要通过单词对应到值,然后根据值进行语义训练) -> 构建训练模型(这一块比较复杂,看了代码,应该是用了skip-gram这个模型,然后种种方法计算出了各种单词的相似性,最后根据这个相似性划分词向量) -> 开始训练(这部分跟上面相同,创建会话,交到图上sess.run) -> 词向量可视化(这部分其实挺有趣的,他把单个词向量从一维变到了二维,然后写文件到磁盘上,结束)。
上面是大致的步骤,其中还有很多很多的细节,具体还要请教百度了,我水平有限,没办法细说。 Sentiment Analysis语义分析
这一块主要建立在上面的基础之上,建立词典之后,也就意味着有了词向量的关系。接着,我们可以用LSTM这个模型进行情感分析(其实情感分析与语义分析很像)。
LSTM(Long Short Term Memory):通常输入的是一个个词向量,与RNN相似,通过一系列计算,还有最后的softmax整合,输出的是一个概率,分别代表可能性是多少,最后就可以转为是否的二分问题了
Emmmm关于LSTM,不想说太多,感觉实在是太复杂了=_=论文看的心累,而且之前看吴恩达的视频的时候,就非常理论2333。情感分析也是教育学一个重要的方向,在不久的将来,如果机器能捕捉到人类的情感的话,就能更好的服务人类了(当然也可能背叛人类了2333)以下是一些关键代码,我直接复制粘贴了:
# 构造计算图
graph = tf.Graph()
with graph.as_default():
tf_train_dataset = tf.placeholder(tf.float32, shape=(None, MAX_SIZE, vector_size),name=‘x‘)
tf_train_steps = tf.placeholder(tf.int32, shape=(None),name=‘x_step‘)
tf_train_labels = tf.placeholder(tf.float32, shape=(batch_size, output_size))
# tf_test_dataset = tf.constant(testData, tf.float32,name=‘input_x‘)
# tf_test_steps = tf.constant(testSteps, tf.int32,name=‘steps‘)
tf_test_dataset = tf.placeholder(tf.float32, shape=(None, MAX_SIZE, vector_size), name=‘input_x‘)
tf_test_steps = tf.placeholder(tf.int32, shape=(None), name=‘steps‘)
lstm_cell = tf.contrib.rnn.BasicLSTMCell(num_units=num_nodes,
state_is_tuple=True)
w1 = tf.Variable(tf.truncated_normal([num_nodes, num_nodes // 2], stddev=0.1))
b1 = tf.Variable(tf.truncated_normal([num_nodes // 2], stddev=0.1))
w2 = tf.Variable(tf.truncated_normal([num_nodes // 2, 2], stddev=0.1))
b2 = tf.Variable(tf.truncated_normal([2], stddev=0.1))
def model(dataset, steps):
outputs, last_states = tf.nn.dynamic_rnn(cell=lstm_cell,
dtype=tf.float32,
sequence_length=steps,
inputs=dataset)
hidden = last_states[-1]
hidden = tf.matmul(hidden, w1) + b1
logits = tf.matmul(hidden, w2) + b2
return logits
train_logits = model(tf_train_dataset, tf_train_steps)
loss = tf.reduce_mean(
tf.nn.softmax_cross_entropy_with_logits(labels=tf_train_labels,
logits=train_logits))
optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
test_prediction = tf.nn.softmax(model(tf_test_dataset, tf_test_steps))
tf.add_to_collection(‘pred_network‘, test_prediction) #用于加载模型获取要预测的网络结构
#保存模型
saver = tf.train.Saver()
此处为构造计算图
到此处,我的总结也结束啦,最后贴上一张合照,以作纪念!我觉得,这次的活动主办方还是非常给力的,各方面准备都很棒,谢谢各位志愿者,谢谢老师的奉献~
最后,嗯,妹子真多,再跟本校比比,不说了,我还是继续写代码了=_=
以上是关于Google Innocamp X 华师大 总结的主要内容,如果未能解决你的问题,请参考以下文章