最近需要寫乙個神經網路模型來做分類。
作為此前沒有實戰過深度學習,只寫過svm之類的,學習過一些理論知識的新手,為了快速上手,第一想法就是找乙個簡單的demo跑通,對整個流程和結構有乙個初步體驗。於是在網上找了乙個tensorflow實戰系列:手把手教你使用lstm進行文字分類
但是教程存在乙個問題,是沒有把資料集分成訓練和**兩個部分,導致學習過程中學習資料和**資料產生混淆,讓我有些迷茫,然後通過學習單個函式和嘗試,跑通了**。新增內容:
遺留問題:之前寫機器學習的時候習慣使用交叉驗證(cross validation),在這個**中沒有看到有驗證部分,後續會開始寫需要寫的**,並看一些比這個稍微再複雜一些的**,進一步了解深度學習程式設計。
# -*- coding: utf-8 -*-
import tensorflow as tf
from tensorflow.contrib import learn
import numpy as np
from tensorflow.python.ops.rnn import static_rnn
from tensorflow.python.ops.rnn_cell_impl import basiclstmcell
# 資料
positive_texts =
["我 今天 很 開心"
,"我 很 高興"
,"他 很 高興"
,"他 很 開心"
]negative_texts =
["我 不 高興"
,"我 不 開心"
,"他 很 不 高興"
,"他 很 生氣"
]label_name_dict =
pre_texts =
["誰 今天 不 開心"
,"開心 嗎"
,"在 嗎"
]# 配置資訊
embedding_size =
50num_classes =
2# 將文字和標籤向量化
all_texts = positive_texts + negative_texts
labels =[0
]*len(positive_texts)+[
1]*len
(negative_texts)
max_document_length =
4vocab_processor = learn.preprocessing.vocabularyprocessor(max_document_length)
datas = np.array(
list
(vocab_processor.fit_transform(all_texts)))
# 按詞建立字典
pre = np.array(
list
(vocab_processor.transform(pre_texts)))
vocab_size =
len(vocab_processor.vocabulary_)
# 字典長度
# 容器
datas_placeholder = tf.placeholder(tf.int32,
[none
, max_document_length]
)#自適應行數,列數為max_document_length
labels_placeholder = tf.placeholder(tf.int32,
[none])
# 構建隨機的詞向量矩陣
# tf.get_variable(name, shape, initializer): name變數的名稱,shape變數的維度,initializer變數初始化的方式
embeddings = tf.get_variable(
"embeddings"
,[vocab_size, embedding_size]
, initializer=tf.truncated_normal_initializer)
embedded = tf.nn.embedding_lookup(embeddings, datas_placeholder)
# 將資料處理成lstm的輸入格式(時序)
rnn_input = tf.unstack(embedded, max_document_length, axis=1)
# 定義lstm
lstm_cell = basiclstmcell(
20, forget_bias=
1.0)
rnn_outputs, rnn_states = static_rnn(lstm_cell, rnn_input, dtype=tf.float32)
#predict
logits = tf.layers.dense(rnn_outputs[-1
], num_classes)
predicted_labels = tf.argmax(logits, axis=1)
losses = tf.nn.softmax_cross_entropy_with_logits(
labels=tf.one_hot(labels_placeholder, num_classes)
, logits = logits
)mean_loss = tf.reduce_mean(losses)
optimizer = tf.train.adamoptimizer(learning_rate=1e-
2).minimize(mean_loss)
with tf.session(
)as sess:
sess.run(tf.global_variables_initializer())
feed_dict =
print
("begin training"
)# 訓練
for step in
range
(100):
_, mean_loss_val = sess.run(
[optimizer, mean_loss]
, feed_dict=feed_dict)
if step%
10==0:
print
("step = {}\t mean loss ={}"
.format
(step, mean_loss_val)
)print
("predict"
)# **
predicted_labels_val = sess.run(predicted_labels, feed_dict=
)for i, text in
enumerate
(pre_texts)
: label = predicted_labels_val[i]
label_name = label_name_dict[label]
print
("{} => {}"
.format
(text, label_name)
)
執行結果
反卷積實現 tensorflow 實現
deconv解卷積,實際是叫做conv transpose,conv transpose實際是卷積的乙個逆向過程,tf中,編寫conv transpose 的時候,心中想著乙個正向的卷積過程會很有幫助。想象一下我們有乙個正向卷積 input shape 1,5,5,3 kernel shape 2,...
Tensorflow實現嶺回歸
嶺回歸可以看作是線性回歸的一種增強版,實現的時候無非就是加入乙個二範數正則化項,但是應當注意,這裡只對於權重進行懲罰,偏置項是不加入正則化的,具體理論可以參見相關的 和blog,在此不贅述。這裡還是使用tf實現了嶺回歸演算法,並實際應用在了乙個真實資料集而非人工資料集上,資料及規模相比於之前的資料也...
Tensorflow實現邏輯回歸
import tensorflow as tf 匯入mnist資料集 from tensorflow.examples.tutorials.mnist import input data mnist input data.read data sets temp data one hot true 定...