使用 全连接神经网络 和 词袋模型 进行文本分类的example
2016-11-03 16:37
706 查看
# -*- coding: utf-8 -*- import jieba import tensorflow as tf def prepareTestData(): f = open("test.txt",'r') Y = [] sentenceList = [] while True: line = f.readline() if len(line) == 0: break temp = str.split(line," ") line = temp[0] y = temp[1] Y.append(y) words = jieba.lcut(line) # totalWordList.extend(words) sentenceList.append(words) sentenceByNumberList = [] for i in range(0,len(sentenceList)): sentenceByNumber = [] for k in range(0,len(totalWordList)): sentenceByNumber.append(0) for j in range(0,len(sentenceList[i])): if sentenceList[i][j] in totalWordList: index = totalWordList.index(sentenceList[i][j]) sentenceByNumber[index]=sentenceByNumber[index]+1 sentenceByNumberList.append(sentenceByNumber) f.close() Y_feed = [] for i in range(0,len(Y)): temp = [0]*n_classes temp[int(Y[i])-1]=1 Y_feed.append(temp) return sentenceByNumberList,Y_feed #下面是BOW的事 jieba.initialize() jieba.add_word("看电视",0) jieba.add_word("看",100,"v") jieba.add_word("电视",100,"n") totalWordList = [] sentenceList = [] Y = [] f = open("train.txt",'r') while True: line = f.readline() if len(line) == 0: break temp = str.split(line," ") line = temp[0] y = temp[1] Y.append(y) words = jieba.lcut(line) totalWordList.extend(words) sentenceList.append(words) totalWordList = list(set(totalWordList)) #totalWordList.remove("\n") sentenceByNumberList = [] for i in range(0,len(sentenceList)): sentenceByNumber = [] for k in range(0,len(totalWordList)): sentenceByNumber.append(0) for j in range(0,len(sentenceList[i])): if sentenceList[i][j] in totalWordList: index = totalWordList.index(sentenceList[i][j]) sentenceByNumber[index]=sentenceByNumber[index]+1 sentenceByNumberList.append(sentenceByNumber) f.close() Y_feed = [] for i in range(0,len(Y)): temp = [0,0,0,0,0] temp[int(Y[i])-1]=1 Y_feed.append(temp) #下面是tensorflow的事 learning_rate = 0.001 training_epochs = 15 batch_size = 100 display_step = 1 n_hidden_1 = 256 n_hidden_2 = 256 n_input = len(totalWordList) n_classes = len(set(Y)) x = tf.placeholder("float", [None, n_input]) y = tf.placeholder("float", [None, n_classes]) def multilayer_perceptron(x, weights, biases): layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1']) layer_1 = tf.nn.relu(layer_1) layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2']) layer_2 = tf.nn.relu(layer_2) out_layer = tf.matmul(layer_2, weights['out']) + biases['out'] return out_layer weights = { 'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])), 'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])), 'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes])) } biases = { 'b1': tf.Variable(tf.random_normal([n_hidden_1])), 'b2': tf.Variable(tf.random_normal([n_hidden_2])), 'out': tf.Variable(tf.random_normal([n_classes])) } pred = multilayer_perceptron(x, weights, biases) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(pred, y)) optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost) init = tf.initialize_all_variables() with tf.Session() as sess: sess.run(init) for epoch in range(training_epochs): avg_cost = 0. total_batch = 10 for i in range(total_batch): batch_x = sentenceByNumberList batch_y = Y_feed _, c = sess.run([optimizer, cost], feed_dict={x: batch_x, y: batch_y}) # 计算平均loss avg_cost += c / total_batch if epoch % display_step == 0: print "Epoch:", '%04d' % (epoch+1), "cost=", \ "{:.9f}".format(avg_cost) print "Optimization Finished!" # 测试模型,分别用原数据和测试数据 pred = multilayer_perceptron(x, weights, biases) correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) # 计算Accuracy accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) print "Accuracy:", accuracy.eval({x: sentenceByNumberList, y: Y_feed}) testX,testY = prepareTestData() print "Accuracy:", accuracy.eval({x: testX, y: testY})
test.txt:
给我播放故事 5 我想听故事 5
train.txt:
我想看电视 1 我想听音乐 2 我想打电话 3 我想发消息 4 我想听故事 5 播放音乐 2 播放故事 5 给我放故事 5
最后发现loss为0了已经,在原数据测试表现很好,而测试数据不行,也就是过拟合了。
相关文章推荐
- 使用Kubernetes和TensorFlow Serving将神经网络镜像分类进行弹性扩容
- 使用词袋模型对图像进行分类
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程<二>
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
- NLP:使用深度学习进行文本分类的一些主要模型
- 【神经网络与深度学习】Caffe使用step by step:使用自己数据对已经训练好的模型进行finetuning
- 使用CNN神经网络进行图片识别分类
- 使用单线程对文本分类的朴素贝叶斯模型的超参数组合执行网络搜索
- 使用Caffe训练适合自己样本集的AlexNet网络模型,并对其进行分类
- 使用Keras构建神经网络进行Mnist手写字体分类
- 机器学习小试(2)使用多层神经网络进行分类实验
- 使用Matlab结合神经网络模型对多波段影像进行计算
- Keras(2):使用Keras构建神经网络进行Mnist手写字体分类,并定性分析各种超参数的影响
- 使用回馈式神经网络实现一个XOR的非线性分类
- 使用lingpipe自然语言处理包进行文本分类
- 神经网络模型分类
- 为什么神经网络使用互熵而不是分类误差
- 使用无连接的数据报(UDP)进行通信 分类: Java 2015-07-27 20:59 13人阅读 评论(0) 收藏
- 使用 json 进行神经网络结构信息的格式化 (dump & load)
- 【机器学习实验】使用朴素贝叶斯进行文本的分类