資源簡介
使用tensorflow實(shí)現(xiàn)的神經(jīng)網(wǎng)絡(luò)二分類,數(shù)據(jù)集為糖尿病化驗(yàn)數(shù)據(jù),其中前八列為特征,第九列為期望結(jié)果,準(zhǔn)準(zhǔn)確率81.75%,內(nèi)有詳細(xì)的代碼注解,適合新手學(xué)習(xí)使用

代碼片段和文件信息
#?-*-?coding:?utf-8?-*-
“““
Created?on?Fri?Oct?26?14:56:45?2018
@author:?Fang
“““
import?tensorflow?as?tf
import?numpy?as?np
from?sklearn.preprocessing?import?StandardScaler?#標(biāo)準(zhǔn)化
from?sklearn.preprocessing?import?scale?#按行或列標(biāo)準(zhǔn)化
from?sklearn.preprocessing?import?Normalizer
from?sklearn.preprocessing?import?MinMaxScaler
def?load_data():
????‘‘‘
????加載訓(xùn)練集和測(cè)試集,并將數(shù)據(jù)轉(zhuǎn)化為矩陣
????training_data???訓(xùn)練集,包含461條數(shù)據(jù)
????test_data???????測(cè)試集,包含307條數(shù)據(jù)
????‘‘‘
????file1?=?‘diabetes_data.txt‘?
????p?=?open(file1)
????lines?=?p.readlines()
????n?=?len(lines)
????datamat?=?np.zeros((n9))
????row?=?0
????for?i?in?lines:
????????i?=?i.strip().split(‘‘)
????????datamat[row:]?=?i[:]
????????row?+=?1
????training_data?=?datamat[::]
????
????file2?=?‘diabetes_test.txt‘?
????p1?=?open(file2)
????line?=?p1.readlines()
????n1?=?len(line)
????datamat2?=?np.zeros((n19))
????row1?=?0
????for?i?in?line:
????????i?=?i.strip().split(‘‘)
????????datamat2[row1:]?=?i[:]
????????row1?+=?1
????test_data?=?datamat2[::]
????return?training_datatest_data
????#定義神經(jīng)網(wǎng)絡(luò)的參數(shù)
????learning_rate?=?0.009??#學(xué)習(xí)率
????training_step?=?7000?#訓(xùn)練迭代次數(shù)
????testing_step?=?6000?#測(cè)試迭代次數(shù)
????display_step?=?1000?#每多少次迭代顯示一次損失
????#定義輸入和輸出
????x?=?tf.placeholder(tf.float32shape=(None8)name=“X_train“)
????y?=?tf.placeholder(tf.float32shape=(None1)name=“Y_train“)
????#定義模型參數(shù)
????w?=?tf.Variable(tf.random_normal([81]stddev=1.0seed=1))
????b?=?tf.Variable(tf.random_normal([1]stddev=1.0seed=1))
????#定義神經(jīng)網(wǎng)絡(luò)的前向傳播過程
????#Model?=?tf.nn.sigmoid(tf.matmul(xw)?+?b)
????Model?=?tf.nn.tanh(tf.matmul(xw)?+?b)
????#Model?=?tf.nn.relu(tf.matmul(xw)?+?b)
????“““
????對(duì)模型進(jìn)行優(yōu)化,將Model的值加0.5之后進(jìn)行取整,
????方便測(cè)試準(zhǔn)確率(若Model>0.5則優(yōu)化后會(huì)取整為1,反之會(huì)取整為0)
????“““
????model?=?Model?+?0.5
????model?=?tf.cast(modeltf.int32)
????y_?=?tf.cast(ytf.int32)
????#Dropout操作:用于防止模型過擬合
????keep_prob?=?tf.placeholder(tf.float32)
????Model_drop?=?tf.nn.dropout(Modelkeep_prob)
????#損失函數(shù):交叉熵
????cross_entropy?=?-tf.reduce_mean(y?*?tf.log(tf.clip_by_value(Model1e-101.0))+(1-y)?*?tf.log(tf.clip_by_value(1-Model1e-101.0)))
????“““
????優(yōu)化函數(shù)
????即反向傳播過程
????主要測(cè)試了Adam算法和梯度下降算法,Adam的效果較好
????“““
????#優(yōu)化器:使用Adadelta算法作為優(yōu)化函數(shù),來保證預(yù)測(cè)值與實(shí)際值之間交叉熵最小
????#optimizer?=?tf.train.AdamOptimizer(learning_rate).minimize(cross_entropy)
????#優(yōu)化器:梯度下降
????optimizer?=?tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)
????#加載數(shù)據(jù)and數(shù)據(jù)預(yù)處理
????#加載
????training_datatest_data?=?load_data()
????#訓(xùn)練集
????X_train?=?training_data[::8]
????Y_train?=?training_data[:8:9]
????#測(cè)試集
????X_test?=?test_data[::8]
????Y_test?=?test_data[:8:9]
????#X_test_Mn?=?StandardScaler().fit_transform(X_test)
????b?=?MinMaxScaler()
????X_test_cen?=?b.fit_transform(X_test)
????#1、標(biāo)準(zhǔn)化
????#X_train_Mn?=?StandardScaler().fit_transform(X_train)
????#2、正則化?norm為正則化方法:‘l1‘‘l2‘‘max‘
????#X_train_nor?=?Normalizer(norm=‘max‘).fit_transform(X_train)??
????#3、歸一化(centering)
????a?=?M
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-19?10:08??基于tensorflow的二分類\
?????文件???????14268??2018-10-22?22:01??基于tensorflow的二分類\diabetes_data.txt
?????文件????????9507??2018-10-23?22:00??基于tensorflow的二分類\diabetes_test.txt
?????文件????????5931??2018-11-08?18:59??基于tensorflow的二分類\tf_2.py
評(píng)論
共有 條評(píng)論