# -*- coding: utf-8 -*-
# https://www.w3cschool.cn/tensorflow_python/tensorflow_python-13p92sws.html //layers
# https://my.oschina.net/u/876354/blog/1637819 GoogLeNet(v1到v4)
# https://www.zhihu.com/question/49039504 GoogLeNet實現(xiàn)
# https://blog.csdn.net/m0_37987687/article/details/80241893
# http://www.reibang.com/p/cb8ebcee1b15 BN層參數(shù)保存
import os
import tensorflow as tf
import 數(shù)據(jù)處理_hss as data_hss
import shutil
import numpy as np
import time
def conv1d_relu(X,filters,kernel_size,strides,is_training):
X_change = tf.layers.conv1d(X, filters, kernel_size, strides, 'same', use_bias=True, activation=None)
X_change = tf.layers.batch_normalization(X_change,training = is_training)
X_change = tf.nn.relu(X_change)
return X_change
def model_inception_v2():
input__data = tf.placeholder(tf.float32, [None, 75])
# print("input__data",input__data)
input__label = tf.placeholder(tf.float32, [None, 2])
inputdata = tf.reshape(input__data,[-1,75,1])
is_training = tf.placeholder(tf.bool)
# print("is_training",is_training)
conv1_7x7 = conv1d_relu(inputdata, 64, 7, 2 ,is_training)
pool1_3x3 = tf.layers.max_pooling1d(conv1_7x7, 3, 2, padding='same')
#深度學(xué)習(xí)的局部響應(yīng)歸一化LRN層,對局部神經(jīng)元的活動創(chuàng)建競爭機(jī)制继薛,使得其中響應(yīng)比較大的值變得相對更大袄膏,并抑制其他反饋較小的神經(jīng)元,增強(qiáng)了模型的泛化能力招刨。
# pool1_3x3 = tf.nn.local_response_normalization(pool1_3x3) # 圖像
conv2_3x3_reduce = conv1d_relu(pool1_3x3, 64, 1, 1,is_training)
conv2_3x3 = conv1d_relu(conv2_3x3_reduce, 192, 3, 1,is_training)
# conv2_3x3 = tf.nn.local_response_normalization(conv2_3x3)
pool2_3x3 = tf.layers.max_pooling1d(conv2_3x3, 3, 2, padding='same')
# 3a ###########
inception_3a_1_1 = conv1d_relu(pool2_3x3, 64, 1, 1,is_training)
inception_3a_3_3_reduce = conv1d_relu(pool2_3x3, 96, 1, 1,is_training)
inception_3a_3_3 = conv1d_relu(inception_3a_3_3_reduce, 128, 3, 1,is_training)
inception_3a_5_5_reduce = conv1d_relu(pool2_3x3, 16, 1, 1,is_training)
inception_3a_5_5 = conv1d_relu(inception_3a_5_5_reduce, 32, 3, 1,is_training)
inception_3a_5_5 = conv1d_relu(inception_3a_5_5, 32, 3, 1,is_training)
inception_3a_pool = tf.layers.max_pooling1d(pool2_3x3, 3, 1, padding='same')
inception_3a_pool_1_1 = conv1d_relu(inception_3a_pool, 32, 1, 1,is_training)
inception_3a_output = tf.concat([inception_3a_1_1,inception_3a_3_3,inception_3a_5_5,inception_3a_pool_1_1],axis=2)
# 3b ###########
inception_3b_1_1 = conv1d_relu(inception_3a_output, 128, 1, 1,is_training)
inception_3b_3_3_reduce = conv1d_relu(inception_3a_output, 128, 1, 1,is_training)
inception_3b_3_3 = conv1d_relu(inception_3b_3_3_reduce, 192, 3, 1,is_training)
inception_3b_5_5_reduce = conv1d_relu(inception_3a_output, 32, 1, 1,is_training)
inception_3b_5_5 = conv1d_relu(inception_3b_5_5_reduce, 96, 3, 1,is_training)
inception_3b_5_5 = conv1d_relu(inception_3b_5_5, 96, 3, 1,is_training)
inception_3b_pool = tf.layers.max_pooling1d(inception_3a_output, 3, 1, padding='same')
inception_3b_pool_1_1 = conv1d_relu(inception_3b_pool, 64, 1, 1,is_training)
inception_3b_output = tf.concat([inception_3b_1_1, inception_3b_3_3, inception_3b_5_5,inception_3b_pool_1_1],axis=2)
pool3_3_3 = tf.layers.max_pooling1d(inception_3b_output, 3, 2, padding='same')
# 4a ###########
inception_4a_1_1 = conv1d_relu(pool3_3_3, 192, 1, 1,is_training)
inception_4a_3_3_reduce = conv1d_relu(pool3_3_3, 96, 1, 1,is_training)
inception_4a_3_3 = conv1d_relu(inception_4a_3_3_reduce, 208, 3, 1,is_training)
inception_4a_5_5_reduce = conv1d_relu(pool3_3_3, 16, 1, 1,is_training)
inception_4a_5_5 = conv1d_relu(inception_4a_5_5_reduce, 48, 3, 1,is_training)
inception_4a_5_5 = conv1d_relu(inception_4a_5_5, 48, 3, 1,is_training)
inception_4a_pool = tf.layers.max_pooling1d(pool3_3_3, 3, 1, padding='same')
inception_4a_pool_1_1 = conv1d_relu(inception_4a_pool, 64, 1, 1,is_training)
inception_4a_output = tf.concat([inception_4a_1_1, inception_4a_3_3, inception_4a_5_5, inception_4a_pool_1_1],axis=2)
# 4b ###########
inception_4b_1_1 = conv1d_relu(inception_4a_output, 160, 1, 1,is_training)
inception_4b_3_3_reduce = conv1d_relu(inception_4a_output, 112, 1, 1,is_training)
inception_4b_3_3 = conv1d_relu(inception_4b_3_3_reduce, 224, 3, 1,is_training)
inception_4b_5_5_reduce = conv1d_relu(inception_4a_output, 24, 1, 1,is_training)
inception_4b_5_5 = conv1d_relu(inception_4b_5_5_reduce, 64, 3, 1,is_training)
inception_4b_5_5 = conv1d_relu(inception_4b_5_5, 64, 3, 1,is_training)
inception_4b_pool = tf.layers.max_pooling1d(inception_4a_output, 3, 1, padding='same')
inception_4b_pool_1_1 = conv1d_relu(inception_4b_pool, 64, 1, 1,is_training)
inception_4b_output = tf.concat([inception_4b_1_1, inception_4b_3_3, inception_4b_5_5,inception_4b_pool_1_1],axis=2)
# 4c ###########
inception_4c_1_1 = conv1d_relu(inception_4b_output, 128, 1, 1,is_training)
inception_4c_3_3_reduce = conv1d_relu(inception_4b_output, 128, 1, 1,is_training)
inception_4c_3_3 = conv1d_relu(inception_4c_3_3_reduce, 128, 3, 1,is_training)
inception_4c_5_5_reduce = conv1d_relu(inception_4b_output, 24, 1, 1,is_training)
inception_4c_5_5 = conv1d_relu(inception_4c_5_5_reduce, 64, 3, 1,is_training)
inception_4c_5_5 = conv1d_relu(inception_4c_5_5, 64, 3, 1,is_training)
inception_4c_pool = tf.layers.max_pooling1d(inception_4b_output, 3, 1, padding='same')
inception_4c_pool_1_1 = conv1d_relu(inception_4c_pool, 64, 1, 1,is_training)
inception_4c_output = tf.concat([inception_4c_1_1, inception_4c_3_3, inception_4c_5_5, inception_4c_pool_1_1],axis=2)
# 4d ###########
inception_4d_1_1 = conv1d_relu(inception_4c_output, 112, 1, 1,is_training)
inception_4d_3_3_reduce = conv1d_relu(inception_4c_output, 144, 1, 1,is_training)
inception_4d_3_3 = conv1d_relu(inception_4d_3_3_reduce, 288, 3, 1,is_training)
inception_4d_5_5_reduce = conv1d_relu(inception_4c_output, 32, 1, 1,is_training)
inception_4d_5_5 = conv1d_relu(inception_4d_5_5_reduce, 64, 3, 1,is_training)
inception_4d_5_5 = conv1d_relu(inception_4d_5_5, 64, 3, 1,is_training)
inception_4d_pool = tf.layers.max_pooling1d(inception_4c_output, 3, 1, padding='same')
inception_4d_pool_1_1 = conv1d_relu(inception_4d_pool, 64, 1, 1,is_training)
inception_4d_output = tf.concat([inception_4d_1_1, inception_4d_3_3, inception_4d_5_5, inception_4d_pool_1_1],axis=2)
# 4e ###########
inception_4e_1_1 = conv1d_relu(inception_4d_output, 256, 1, 1,is_training)
inception_4e_3_3_reduce = conv1d_relu(inception_4d_output, 160, 1, 1,is_training)
inception_4e_3_3 = conv1d_relu(inception_4e_3_3_reduce, 320, 3, 1,is_training)
inception_4e_5_5_reduce = conv1d_relu(inception_4d_output, 32, 1, 1,is_training)
inception_4e_5_5 = conv1d_relu(inception_4e_5_5_reduce, 128, 3, 1,is_training)
inception_4e_5_5 = conv1d_relu(inception_4e_5_5, 128, 3, 1,is_training)
inception_4e_pool = tf.layers.max_pooling1d(inception_4d_output, 3, 1, padding='same')
inception_4e_pool_1_1 = conv1d_relu(inception_4e_pool, 128, 1, 1,is_training)
inception_4e_output = tf.concat([inception_4e_1_1, inception_4e_3_3, inception_4e_5_5,inception_4e_pool_1_1],axis=2)
pool4_3_3 = tf.layers.max_pooling1d(inception_4e_output, 3, 2, padding='same')
# 5a ###########
inception_5a_1_1 = conv1d_relu(pool4_3_3, 256, 1, 1,is_training)
inception_5a_3_3_reduce = conv1d_relu(pool4_3_3, 160, 1, 1,is_training)
inception_5a_3_3 = conv1d_relu(inception_5a_3_3_reduce, 320, 3, 1,is_training)
inception_5a_5_5_reduce = conv1d_relu(pool4_3_3, 32, 1, 1,is_training)
inception_5a_5_5 = conv1d_relu(inception_5a_5_5_reduce, 128, 3, 1,is_training)
inception_5a_5_5 = conv1d_relu(inception_5a_5_5, 128, 3, 1,is_training)
inception_5a_pool = tf.layers.max_pooling1d(pool4_3_3, 3, 1, padding='same')
inception_5a_pool_1_1 = conv1d_relu(inception_5a_pool, 128, 1, 1,is_training)
inception_5a_output = tf.concat([inception_5a_1_1, inception_5a_3_3, inception_5a_5_5, inception_5a_pool_1_1],axis=2)
# 5b ###########
inception_5b_1_1 = conv1d_relu(inception_5a_output, 384, 1, 1,is_training)
inception_5b_3_3_reduce = conv1d_relu(inception_5a_output, 192, 1, 1,is_training)
inception_5b_3_3 = conv1d_relu(inception_5b_3_3_reduce, 384, 3, 1,is_training)
inception_5b_5_5_reduce = conv1d_relu(inception_5a_output, 48, 1, 1,is_training)
inception_5b_5_5 = conv1d_relu(inception_5b_5_5_reduce, 128, 3, 1,is_training)
inception_5b_5_5 = conv1d_relu(inception_5b_5_5, 128, 3, 1,is_training)
inception_5b_pool = tf.layers.max_pooling1d(inception_5a_output, 3, 1, padding='same')
inception_5b_pool_1_1 = conv1d_relu(inception_5b_pool, 128, 1, 1,is_training)
inception_5b_output = tf.concat([inception_5b_1_1, inception_5b_3_3, inception_5b_5_5, inception_5b_pool_1_1],axis=2)
##########
keepprob = tf.placeholder(tf.float32)
pool5_7_7 = tf.layers.average_pooling1d(inception_5b_output, 3, 1, padding='valid') # inception_5b_output
pool5_7_7 = tf.layers.dropout(pool5_7_7, training=is_training)
print("pool5_7_7 = ",pool5_7_7.shape)
# 鋪平圖像數(shù)據(jù)
pool5_7_7_flat = tf.layers.Flatten()(pool5_7_7)
print("pool5_7_7_flat = ",pool5_7_7_flat.shape)
#全連接層計算
yconv = tf.layers.dense(pool5_7_7,2) #_flat,activation = tf.nn.softmax
# print("y_conv = ",y_conv.shape)
out = tf.nn.softmax(yconv,name = "out") # 保存成.pb模型需要用到
return input__data,input__label,keepprob,yconv,is_training,out
def optimization(yconv,input__label):
# 計算交叉熵?fù)p失
crossentropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=yconv, labels=input__label))
# 創(chuàng)建優(yōu)化器,通知Tensorflow在訓(xùn)練時要更新均值和方差的分布
with tf.control_dependencies(tf.get_collection(tf.GraphKeys.UPDATE_OPS)):
trainstep = tf.train.AdamOptimizer(1e-2).minimize(crossentropy)
# 創(chuàng)建計算準(zhǔn)確度的操作
correct_prediction = tf.equal(tf.argmax(yconv, 1), tf.argmax(input__label, 1))
accuracyrate = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
return crossentropy,trainstep,accuracyrate
if __name__ == '__main__':
start = time.time()
file_1 = r'D:\hss_python_work\resnet_cnn\數(shù)據(jù)集\N' #文件夾
file_2 = r'D:\hss_python_work\resnet_cnn\數(shù)據(jù)集\S'
file_3 = r'D:\hss_python_work\resnet_cnn\數(shù)據(jù)集\T'
file_4 = r'D:\hss_python_work\resnet_cnn\數(shù)據(jù)集\V'
file_5 = r'D:\hss_python_work\resnet_cnn\數(shù)據(jù)集\X'
file_NO_X = r'D:\hss_python_work\resnet_cnn\數(shù)據(jù)集\非X'
data_all_1,label_all_1 = data_hss.data_analysis(file_NO_X,label_def = [0,1],proportion = 800) # 先定義標(biāo)簽
data_all_2,label_all_2 = data_hss.data_analysis(file_5,label_def = [1,0],proportion = 50) # 先定義標(biāo)簽
data_all = data_all_1 + data_all_2
label_all = label_all_1 + label_all_2
print("data_all = ",len(data_all))
print("label_all = ",len(label_all))
data_train,label_train,data_test,label_tast = data_hss.Dataset_partition(data_all,label_all)
print(data_train.shape,label_train.shape,data_test.shape,label_tast.shape)
sess = tf.InteractiveSession()
input_data,input_label,keep_prob,y_conv,is_training = model_inception_v2()
cross_entropy,train_step,accuracy_rate = optimization(y_conv,input_label)
########開始訓(xùn)練過程########
# 初始化所有變量暖释、參數(shù)
tf.global_variables_initializer().run()
var_list = [var for var in tf.global_variables() if "moving" in var.name]
var_list += tf.trainable_variables()
m_saver = tf.train.Saver(var_list=var_list, max_to_keep=5)
# ########### 訓(xùn)練(設(shè)置訓(xùn)練時Dropout的kepp_prob比率為0.5戚炫。mini-batch為50剑刑,進(jìn)行2000次迭代訓(xùn)練,參與訓(xùn)練樣本5萬)
# model_doc = r'model' # 存儲模型的文件夾
# if not os.path.exists(model_doc): # 模型存儲文件夾
# os.makedirs(model_doc)
# else:
# shutil.rmtree(model_doc) #先強(qiáng)制刪除文件夾
# os.makedirs(model_doc)
#
# train_accuracy_all = [] #保存所有準(zhǔn)確度
# max_acc = 0
# f = open('model/acc.txt','w')
#
# for i in range(10000):
#
# batch_data_train,batch_label_train = data_hss.batch(data_train,label_train,batch_size = 200)
# # print("batch_data_train = ",batch_data_train,batch_data_train.shape)
# # print("batch_label_train = ",batch_label_train,batch_label_train.shape)
#
# # 循環(huán)次數(shù)是100的倍數(shù)的時候,打印
# if i%1 == 0:
#
# train_accuracy = accuracy_rate.eval(feed_dict={input_data:batch_data_train,input_label: batch_label_train,
# keep_prob: 0.5,is_training : False})
# print ("-->step %d, training accuracy %.4f ,max_acc %.4f"%(i, train_accuracy,max_acc))
# print("cross_entropy = ",sess.run(cross_entropy,feed_dict={input_data:batch_data_train,input_label: batch_label_train,
# keep_prob: 0.5,is_training : False}))
# f.write(str(i)+', train_accuracy: '+str(train_accuracy)+' '+str(max_acc) +'\n')
# # #保存最近的5次模型
# # m_saver.save(sess, './model/model.ckpt', global_step=i)
# #保存準(zhǔn)確度最高的5次模型
# if train_accuracy >= max_acc :
# max_acc = train_accuracy
# if train_accuracy >= max_acc - 0.04:
# m_saver.save(sess, './model/model.ckpt', global_step=i)
#
# train_accuracy_all.append(train_accuracy)
#
# if max_acc >= 0.95 and train_accuracy < 0.5: #訓(xùn)練準(zhǔn)確度過了最高點并下降施掏,就停止訓(xùn)練
# print("break reason 1")
# break
# if (len(train_accuracy_all) >= 5 #訓(xùn)練準(zhǔn)確度大于5次钮惠,且最后的5次準(zhǔn)確度全在95%以上,就停止
# and train_accuracy_all[len(train_accuracy_all) - 1] > 0.97
# and train_accuracy_all[len(train_accuracy_all) - 2] > 0.97
# and train_accuracy_all[len(train_accuracy_all) - 3] > 0.97
# and train_accuracy_all[len(train_accuracy_all) - 4] > 0.97
# and train_accuracy_all[len(train_accuracy_all) - 5] > 0.97) :
# # print(train_accuracy_all)
# print("break reason 2")
# break
#
# # 執(zhí)行訓(xùn)練模型
# train_step_,loss = sess.run([train_step,cross_entropy], feed_dict={input_data:batch_data_train,
# input_label: batch_label_train,
# keep_prob: 0.5,
# is_training : True})
#
#
# # 打印測試集正確率 七芭,全部訓(xùn)練完成之后素挽,在最終測試集上進(jìn)行全面測試,得到整體的分類準(zhǔn)確率
# # print(train_accuracy_all)
# if max_acc >= 0.9 and train_accuracy < 0.5: #訓(xùn)練準(zhǔn)確度過了最高點并下降狸驳,就停止訓(xùn)練
# break
# f.close()
#######模型讀回及預(yù)測
model_file=tf.train.latest_checkpoint('model/')
m_saver.restore(sess,model_file)
a = 0 # 預(yù)測對的個數(shù)
TP = 0 # 預(yù)測正確的病癥個數(shù)
FN_TP = 0 # 原標(biāo)簽中有病癥的個數(shù)
TN = 0 # 預(yù)測正確的非病癥個數(shù)
TN_FP = 0 # 原標(biāo)簽中正常的個數(shù)
sensibility = 0 # 敏感性
specificity = 0 # 特異性
#### 批量心拍預(yù)測
output = sess.run(y_conv , feed_dict = {input_data:data_test, keep_prob: 1.0,is_training : False})
print("output = ",output)
output = sess.run(tf.nn.softmax(output))
output = np.round(output) #np.round(output) #取最接近的整數(shù)
print("output = ",output)
print("label_tast = ",label_tast)
for i in range(0,len(data_test)):
if label_tast[i][0] == output[i][0] and label_tast[i][1] == output[i][1] :
a +=1
if label_tast[i][0] == output[i][0] and output[i][0] == 1: #敏感性
TP += 1
if label_tast[i][0] == 1 :
FN_TP += 1
if label_tast[i][1] == output[i][1] and output[i][1] == 1: #特異性
TN += 1
if label_tast[i][1] == 1 :
TN_FP += 1
### 單個心拍預(yù)測
single_data = np.empty([1,75])
for i in range(0,len(data_test)):
single_data[0] = data_test[i]
# print("single_data = ",single_data)
# print("single_label = ",single_label)
output = sess.run(y_conv , feed_dict = {input_data:single_data, keep_prob: 1.0,is_training : False})
# print("output = ",output)
output = sess.run(tf.nn.softmax(output))
output = np.round(output) #np.round(output) #取最接近的整數(shù)
print(i,"/",len(data_test)-1," output = ",output,"single_label = ",label_tast[i])
if label_tast[i][0] == output[0][0] and label_tast[i][1] == output[0][1] :
a +=1
if label_tast[i][0] == output[0][0] and output[0][0] == 1: #敏感性
TP += 1
if label_tast[i][0] == 1 :
FN_TP += 1
if label_tast[i][1] == output[0][1] and output[0][1] == 1: #特異性
TN += 1
if label_tast[i][1] == 1 :
TN_FP += 1
print("len(data_test) = ",len(data_test),"a =",a)
print("sensibility = ",TP/FN_TP,"specificity =",TN/TN_FP)
end = time.time()
print("程序運行時間:",end - start)
inception_v2網(wǎng)絡(luò)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門术辐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人施无,你說我怎么就攤上這事辉词。” “怎么了帆精?”我有些...
- 文/不壞的土叔 我叫張陵较屿,是天一觀的道長隧魄。 經(jīng)常有香客問我卓练,道長,這世上最難降的妖魔是什么购啄? 我笑而不...
- 正文 為了忘掉前任襟企,我火速辦了婚禮,結(jié)果婚禮上狮含,老公的妹妹穿的比我還像新娘顽悼。我一直安慰自己,他們只是感情好几迄,可當(dāng)我...
- 文/花漫 我一把揭開白布蔚龙。 她就那樣靜靜地躺著,像睡著了一般映胁。 火紅的嫁衣襯著肌膚如雪木羹。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼苍在,長吁一口氣:“原來是場噩夢啊……” “哼绝页!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寂恬,我...
- 正文 年R本政府宣布,位于F島的核電站狡逢,受9級特大地震影響宁舰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奢浑,卻給世界環(huán)境...
- 文/蒙蒙 一蛮艰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧雀彼,春花似錦壤蚜、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至莺丑,卻和暖如春著蟹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- 原文鏈接:blog.csdn.net/langb2014/article/details/52787095 來自c...
- 南國利劍 Cyberpolice http://weibo.com/nanguojian 前 言: 本次比賽由西電...
- 介紹 Inception系列模型設(shè)計的核心思想講至Inception v3基本已經(jīng)盡了。但2015年Resnet的...
- 學(xué)生信息表拾枣,奶費沃疮,本子錢,米學(xué)網(wǎng)梅肤,家兴臼撸互動(移動)……開學(xué)雜務(wù)最多的一天到來了,雖然我知道這不是唯一的一天姨蝴,以...