2018 08 09 高階內容

2021-08-22 15:21:17 字數 4272 閱讀 5650

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 ...