tensorflow學習小記2

2021-09-02 23:15:08 字數 2773 閱讀 2175

#乙個完整的神經網路例項

在乙個模擬資料及上訓練神經網路來訓練二分類問題

import tensorflow as tf

from numpy.random import randomstate # 雖然報錯並不影響使用,這在random中是私有

batch_size = 8

w1 = tf.variable(tf.random_normal((2, 3), stddev=1, seed=1))

w2 = tf.variable(tf.random_normal((3, 1), stddev=1, seed=1))

x = tf.placeholder(tf.float32, shape=[none, 2], name="x-input")

y_ = tf.placeholder(tf.float32, shape=[none, 1], name="y-input")

# none表示使用不同的batch大小,訓練時候採取較小的batch,測試時可一次使用全部的資料,但當資料集較大時候可能會導致記憶體溢位

a = tf.matmul(x, w1)

y = tf.matmul(a, w2)

# 前向傳播

y = tf.sigmoid(y) # 啟用函式

cross_entropy = -tf.reduce_mean(

y_ * tf.log(tf.clip_by_value(y, 1e-10, 1.0)) + (1 - y)*tf.log(tf.clip_by_value(1 - y, 1e-10, 1.0))) # 交叉熵

train_step = tf.train.adamoptimizer(0.001).minimize(cross_entropy) # adam優化方法

rdm = randomstate(1) # 隨機乙個模擬資料集

dataset_size = 128

x = rdm.rand(dataset_size, 2)

# 資料集的大小為128*2

y = [[int(x1+x2 < 1)] for (x1, x2) in x] # !!注意這裡y是乙個[:1]維的張量

# 定義規則給樣本做標籤,可看作是乙個二分類任務,用0 1表示,定義判斷方法

with tf.session() as sess: # 開始建立會話

init_op = tf.global_variables_initializer() # 全域性變數變數初始化

sess.run(init_op)

print(sess.run(w1))

print(sess.run(w2)) # 列印初始變數

# 設定訓練的輪數

steps = 5000

for i in range(steps):

# 每次選取batch個樣本進行訓練

start = (i * batch_size) % dataset_size

end = min(start + batch_size, dataset_size)

# 通過選取的樣本訓練神經網路並更新引數

sess.run(train_step, feed_dict=)

if i % 1000 == 0:

# 每隔一段時間計算所在資料上的交叉熵並輸出

total_cross_entropy = sess.run(cross_entropy, feed_dict=)

print("after %d training steps(s), cross entropy on all data is %g" %

(i, total_cross_entropy))

print(sess.run(w1))

print(sess.run(w2))

第四章部分筆記

a = tf.nn.relu(tf.matmul(x, w1) + biases1)

y = tf.nn.relu(tf.matmul(a, w2) + biases2) # 類似的tf.nn.sigmod(),tf.tanh()

cross_entropy = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y, le-10, 1.0))) # y_代表正確結果,y代表預期結果/

# tf.clip_by_value(t,clip_valuemin,clip_valuemax,name)講乙個張量t限制在乙個範圍內(valuemin,valuemax),

# tf.log 求對數,對所有張量求

# tf.matmul 是矩陣乘法和『*』是矩陣對應元素的乘法的區別

# tf.reduce_mean() 對整個矩陣做平均並不改變計算結果的意義

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_, labels=y) # 使用了softmax回歸之後的交叉熵

mse = tf.resuce_mean(tf.square(y_ - y)) # 均方誤差

# 也可以根據實際情況自定義損失函式

loss = tf.reduce_mean(tf.where(tf.greater(v1, v2), (v1 - v2) * a, (v2 - v1) * b))

# tf.greater()輸入是兩個張量返回較大的乙個。

# tf.where()輸入是三個條件,第乙個是判斷條件,判斷選擇條件為true則選擇第二個輸入,否則選第三個,而且tf.where都是在元素級別上進行

tensorflow使用GPU小記

import os os.envrion cuda visible devices 0,1 在cmd中輸入 nvidia smi 要想不斷重新整理記錄 nvidia smi l 報錯 failed to create cublas handle cublas status alloc failed原...

php學習小記2

1.不像 雙引號和 heredoc語法結構,在單引號字串中的 變數和特殊字元的轉義序列將 不會被替換。2.heredoc 結構就象是沒有使用雙引號的雙引號字串,這就是說在 heredoc結構中單引號不用被轉義,但是上文中列出的轉義序列還可以使用。變數將被替換,但在 heredoc結構中含有複雜的變數...

學習tomcat 小記(2)

size medium 1 container container必須實現org.apache.catalina.container介面。然後將container例項設定到connector的setcontainer方法中。這樣,connector就可以呼叫container的invoke方法了。首...