from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('mnist_data', one_hot=true)
# mnist = input_data.read_data_sets('', one_hot=true)
搭建網路
# 作為輸入,規格為 28×28 = 784
xs = tf.placeholder(tf.float32, [none, 784])
# 每個表示乙個數字,0~9,共10類
ys = tf.placeholder(tf.float32, [none, 10])
# 建立輸出層,輸出乙個包含10個元素的列表
# softmax 常用於分類問題
loss函式選用交叉熵函式cross entropy(關於交叉熵,可以參考這篇文章)。交叉熵用來衡量**值和真實值的相似程度,如果完全相同,它們的交叉熵等於零。
另外,定義compute_accuracy來計算精確度。
cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction), reduction_indices=[1]))
# train operation
train_op = tf.train.gradientdescentoptimizer(0.5).minimize(cross_entropy)
# compute accuracy
def compute_accuracy(v_xs, v_ys):
global prediction
global sess
y_pre = sess.run(prediction, feed_dict=)
correct_prediction = tf.equal(tf.argmax(y_pre, 1), tf.argmax(v_ys, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
result = sess.run(accuracy, feed_dict=)
return result
with tf.session() as sess:
sess.run(tf.global_variables_initializer())
# train
for step in range(1000):
batch_xs, batch_ys = mnist.train.next_batch(100)
sess.run(train_op, feed_dict=)
if step % 50 == 0:
print(compute_accuracy(mnist.test.images, mnist.test.labels))
使用sklearn提供的手寫數字資料集from sklearn.datasets import load_digits
。在處理的時候需要將label轉為二進位制,即只有黑白色的畫素。
import tensorflow as tf
from sklearn.datasets import load_digits
from sklearn.cross_validation import train_test_split # split train set and test set
from sklearn.preprocessing import labelbinarizer # convert label to binary 0,1
# load data
digits = load_digits()
x = digits.data
y = digits.target
y = labelbinarizer().fit_transform(y) # fit to data(get mean and variance), then transform it
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
接下來定義需要用到的變數。tf_is_training 用於控制是訓練還是測試
# define inputs
keep_prob = tf.placeholder(tf.float32)
xs = tf.placeholder(tf.float32, [none, 64]) # 8 * 8
ys = tf.placeholder(tf.float32, [none, 10]) # 10 types label
tf_is_training = tf.placeholder(tf.bool, none) # to control dropout when training and testing
定義兩個神經網路,乙個不使用dropout,另乙個使用dropout。(注意:dropout只需要在隱藏層進行即可)。
# normal layer
h1 = tf.layers.dense(xs, 50, tf.nn.softmax)
output = tf.layers.dense(h1, 10)
# dropout layer
dh1 = tf.layers.dropout(xs, 50, tf.nn.softmax)
dh1 = tf.layers.dropout(dh1, rate=0.2, training=tf_is_training)
doutput = tf.layers.dense(dh1, 10)
使用交叉熵作為損失函式。
# loss
loss = tf.losses.softmax_cross_entropy(ys, output)
tf.summary.scalar('loss', loss)
# dropout loss
dloss = tf.losses.softmax_cross_entropy(ys, doutput)
tf.summary.scalar('dloss', dloss)
使用梯度下降優化器。
# train operation
train_op = tf.train.gradientdescentoptimizer(0.1).minimize(loss)
dtrain_op = tf.train.gradientdescentoptimizer(0.1).minimize(dloss)
訓練200次,每10次記錄一次loss和dloss。
日常 2018 08 09 內部類
內部類 1 定義 將類寫在其他類的內部,可以寫在其他類的成員位置和區域性位置,這時寫在其他類內部的類為內部類 2 用途 若乙個事物內部還包含其他可能包含的事物 例 比如汽車裡面還包含發動機 外部類 class car 3 內部類分類 a.成員內部類 1.定義 在外部類中的成員位置 2.呼叫規則 內部...
React 高階內容
1 使用 proptypes 型別檢查 官網 使用 proptypes 型別檢查 import react,from react import proptypes from prop types class todoitem extends component render this.props r...
揹包問題精講2018 08 09
第一道題 這道題就是一道非常的01揹包模板,不過需要注意到題目的條件還需要乘上重要性,也就是價值 原價值 重要度,其他的就按照01揹包模板照打即可。附上 吧 include using namespace std const int maxn 100000 20 int a maxn w maxn ...