畢設論文,程式有錯誤運行不了,希望各位大佬指出程式的錯誤并修改。論文是有關陣列感應測井方面的,A0F01-A0F0111、OKLAHOMAA0F0都是老師給的檔案,內容如圖


代碼部分:
from keras.models import Sequential
from keras.layers import Dense,Dropout,Flatten
from keras.layers import LocallyConnected1D,Conv1D
from keras.optimizers import SGD,Adam,Adagrad,RMSprop,Adadelta,Adamax
from numpy import *
import numpy as np
import keras
import matplotlib.pyplot as plt
%matplotlib inline
na=111
nb=1
nc=520
nd=850
#訓練集
t=0
dataa=np.zeros((na,nc,3))
for filename in ['A0F01.dat','A0F02.dat','A0F03.dat','A0F04.dat','A0F05.dat','A0F06.dat','A0F07.dat','A0F08.dat','A0F09.dat','A0F010.dat',
'A0F011.dat','A0F012.dat','A0F013.dat','A0F014.dat','A0F015.dat','A0F016.dat','A0F017.dat','A0F018.dat','A0F019.dat','A0F020.dat',
'A0F021.dat','A0F022.dat','A0F023.dat','A0F024.dat','A0F025.dat','A0F026.dat','A0F027.dat','A0F028.dat','A0F029.dat','A0F030.dat',
'A0F031.dat','A0F032.dat','A0F033.dat','A0F034.dat','A0F035.dat','A0F036.dat','A0F037.dat','A0F038.dat','A0F039.dat','A0F040.dat',
'A0F041.dat','A0F042.dat','A0F043.dat','A0F044.dat','A0F045.dat','A0F046.dat','A0F047.dat','A0F048.dat','A0F049.dat','A0F050.dat',
'A0F051.dat','A0F052.dat','A0F053.dat','A0F054.dat','A0F055.dat','A0F056.dat','A0F057.dat','A0F058.dat','A0F059.dat','A0F060.dat',
'A0F061.dat','A0F062.dat','A0F063.dat','A0F064.dat','A0F065.dat','A0F066.dat','A0F067.dat','A0F068.dat','A0F069.dat','A0F070.dat',
'A0F071.dat','A0F072.dat','A0F073.dat','A0F074.dat','A0F075.dat','A0F076.dat','A0F077.dat','A0F078.dat','A0F079.dat','A0F080.dat',
'A0F081.dat','A0F082.dat','A0F083.dat','A0F084.dat','A0F085.dat','A0F086.dat','A0F087.dat','A0F088.dat','A0F089.dat','A0F090.dat',
'A0F091.dat','A0F092.dat','A0F093.dat','A0F094.dat','A0F095.dat','A0F096.dat','A0F097.dat','A0F098.dat','A0F099.dat','A0F0100.dat',
'A0F0101.dat','A0F0102.dat','A0F0103.dat','A0F0104.dat','A0F0105.dat','A0F0106.dat','A0F0107.dat','A0F0108.dat','A0F0109.dat','A0F0110.dat','A0F0111.dat']:
myfile=open(filename,'r')
data=https://bbs.csdn.net/topics/[]
for eachline in myfile:
fileds=eachline.split()
row_data=https://bbs.csdn.net/topics/[float(x) for x in fileds]
data.append(row_data)
dataa[t,:,:]=data
t=t+1
myfile.close()
dataa=np.array(dataa)
#測驗集
t=0
datab=np.zeros((nb,nd,3))
for filename in ['OKLAHOMAA0F0.dat']:
myfile=open(filename,'r')
data=https://bbs.csdn.net/topics/[]
for eachline in myfile:
fileds=eachline.split()
row_data=https://bbs.csdn.net/topics/[float(x) for x in fileds]
data.append(row_data)
datab[t,:,:]=data
t=t+1
myfile.close()
datab=np.array(datab)
#######################################################
#設計視窗,對原測井曲線進行截斷,并轉化成電阻率
#x_trainb,x_testb
window_length=11
nm=0
x_trainb=np.zeros((na*nc,window_length))
#yy_train_label=np.zeros((na*nc,window_length))
for ii in range(na):
for jj in range(nc):
for kk in range(window_length):
if (jj-int(window_length/2)+kk)<0:
x_trainb[nm,kk]=1/dataa[ii,0,1]
#yy_train_label[nm,kk]=1/dataa[ii,0,2]
elif (jj-int(window_length/2)+kk)>nc-1:
x_trainb[nm,kk]=1/dataa[ii,nc-1,1] #1/
#yy_train_label[nm,kk]=1/dataa[ii,nc-1,2] #1
else:
x_trainb[nm,kk]=1/dataa[ii, jj-int(window_length/2)+kk,1] #1/
#yy_train_label[nm,kk]=1/dataa[ii, jj-int(window_length/2)+kk,2] #1/
nm=nm+1
nm=0
x_testb=np.zeros((nb*nd,window_length))
for ii in range(nb):
for jj in range(nd):
for kk in range(window_length):
if (jj-int(window_length/2)+kk)<0:
x_testb[nm,kk]=1/datab[ii,0,1] #1/
elif (jj-int(window_length/2)+kk)>nd-1:
x_testb[nm,kk]=1/datab[ii,nd-1,1] #1/
else:
x_testb[nm,kk]=1/datab[ii, jj-int(window_length/2)+kk,1] #
nm=nm+1
#######################################################
#設計標簽,識別所有比例的電阻性上凸起:1,電阻性下凸起:2,電導性凸起:0
ytrain_label=[]
label=[]
for ii in range(na):
temper=dataa[ii,0,2]
for jj in range(nc):
if int(temper/dataa[ii,jj,2])<203 and int(temper/dataa[ii,jj,2])>1.1 and x_trainb[jj+nc*ii,int(window_length/2)-1]<=x_trainb[jj+nc*ii,int(window_length/2)]:
#x_trainb[jj+na*ii,int(window_length/2)-1]<=x_trainb[jj+na*ii,int(window_length/2)+1]:
#上升凸起
tempera=jj+ii*nc
temperb=1
label.append(tempera)
ytrain_label.append(temperb)
elif int(temper/dataa[ii,jj,2])<203 and int(temper/dataa[ii,jj,2])>1.1 and x_trainb[jj+nc*ii,int(window_length/2)-1]>x_trainb[jj+nc*ii,int(window_length/2)]:
#x_trainb[jj+na*ii,int(window_length/2)-1]>x_trainb[jj+na*ii,int(window_length/2)+1]:
#下降凸起
tempera=jj+ii*nc
temperb=2
label.append(tempera)
ytrain_label.append(temperb)
else:
tempera=jj+ii*nc
temperb=0
label.append(tempera)
ytrain_label.append(temperb)
ytrain_label=np.array(ytrain_label)
#plt.subplot(111)
#plt.plot(ytrain_label[34500:35000],'-')
xfilt=window_length
from scipy.stats import norm
x = np.linspace(-1,1,xfilt)
xnorm = norm.pdf(x, loc=0, scale=10)
xnorm=xnorm/sum(xnorm)
#sum(xnorm)
plt.subplot(111)
plt.plot(xnorm,'.')
#計算背景值,用于確定測井曲線的倍數
xtrain_backa=np.zeros(na*nc)
for ii in range(na*nc):
tempera=np.zeros(xfilt)
for jj in range(xfilt):
tempera[jj]=xnorm[jj]*x_trainb[ii,int(window_length/2)-int(xfilt/2)+jj]
xtrain_backa[ii]=sum(tempera)
xtest_backa=np.zeros(nb*nd)
for ii in range(nb*nd):
tempera=np.zeros(xfilt)
for jj in range(xfilt):
tempera[jj]=xnorm[jj]*x_testb[ii,int(window_length/2)-int(xfilt/2)+jj]
xtest_backa[ii]=sum(tempera)
#計算曲線倍數
x_traina=np.zeros((na*nc,xfilt))
for ii in range(na*nc):
for jj in range(xfilt):
x_traina[ii,jj]=x_trainb[ii,jj]/xtrain_backa[ii]
x_testa=np.zeros((nb*nd,xfilt))
for ii in range(nb*nd):
for jj in range(xfilt):
x_testa[ii,jj]=x_testb[ii,jj]/xtest_backa[ii]
#######################################################
shape(x_traina),shape(x_testa),shape(ytrain_label)
#歸一化
for ii in range(x_traina.shape[0]):
for jj in range(x_traina.shape[1]):
x_traina[ii,jj]=(log(x_traina[ii,jj])-log(0.05))/(log(5)-log(0.05))
for ii in range(x_testa.shape[0]):
for jj in range(x_testa.shape[1]):
x_testa[ii,jj]=(log(x_testa[ii,jj])-log(0.05))/(log(5)-log(0.05))
for ii in range(x_trainb.shape[0]):
for jj in range(x_trainb.shape[1]):
x_trainb[ii,jj]=(np.log(x_trainb[ii,jj])-np.log(0.1))/(np.log(2000)-np.log(0.1))
for ii in range(x_testb.shape[0]):
for jj in range(x_testb.shape[1]):
x_testb[ii,jj]=(np.log(x_testb[ii,jj])-np.log(0.1))/(np.log(2000)-np.log(0.1))
nm=0
#取地層模型電阻率值
y_trainb=np.zeros((na*nc))
for ii in range(na):
for jj in range(nc):
y_trainb[nm]=1/dataa[ii,jj,2]
nm=nm+1
nm=0
#標示
y_testb=np.zeros((nb*nd))
for ii in range(nb):
for jj in range(nd):
y_testb[nm]=1/datab[ii,jj,2]
nm=nm+1
x_trainb=x_trainb.reshape(x_trainb.shape[0],x_trainb.shape[1],1)
x_traina=x_traina.reshape(x_traina.shape[0],x_traina.shape[1],1)
x_testb=x_testb.reshape(x_testb.shape[0],x_testb.shape[1],1)
x_testa=x_testa.reshape(x_testa.shape[0],x_testa.shape[1],1)
#采用MLP進行訓練,進行三分類
ytrain_label=keras.utils.to_categorical(ytrain_label,num_classes=3)
shape(x_traina),shape(x_testa),shape(ytrain_label)
file_lengtha=11
file_lengthb=5
from keras import backend as K
###############################電阻率訓練
from keras.layers import Input
import keras
input1=keras.layers.Input(shape=(x_trainb.shape[1],1))
x1=keras.layers.LocallyConnected1D(20,file_lengtha,padding='valid',activation='tanh')(input1)#,activation='relu')(input1)
input2=keras.layers.Input(shape=(x_traina.shape[1],1))
x2=keras.layers.LocallyConnected1D(20,file_lengtha,padding='valid',activation='sigmoid')(input2)
#x3=keras.layers.Multiply()([x1, x2])
#x3=keras.layers.LocallyConnected1D(20,file_lengtha,padding='valid',activation='tanh')(x3)
#x4=keras.layers.LocallyConnected1D(20,file_lengtha,padding='valid',activation='sigmoid')(x2)
#x5=keras.layers.Multiply()([x3, x4])
#x5=keras.layers.core.Flatten()(x5)
#out=keras.layers.Dense(3,activation='softmax')(x5)
x3=keras.layers.Multiply()([x1, x2])
x3=keras.layers.core.Flatten()(x3)
x3=keras.layers.Dense(32)(x3)
x3=keras.layers.Dense(32)(x3)
#x3=keras.activations.softmax(x, axis=-1)
out=keras.layers.Dense(3,activation='softmax')(x3)
model = keras.models.Model(inputs=[input1,input2],outputs=out)
sgd=SGD(lr=0.01,decay=0,momentum=0.5,nesterov=True)
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])#mse 盡量保證誤差在同一個尺度內,所以采用log(Conductivity)
model.fit([x_trainb,x_traina],ytrain_label,batch_size=1,epochs=1, shuffle=True, validation_split=0.05,verbose=1)#除錯改
from keras.models import save_model
model.save('model_array0_papera.h5')
from keras.models import load_model
model = load_model('model_array0_paper.h5')
y_predx=model.predict([x_trainb,x_traina])
y_pred_x=np.zeros((y_predx.shape[0]))
for ii in range(y_predx.shape[0]):
if y_predx[ii,0]==np.max(y_predx[ii,:]):
y_pred_x[ii]=0
elif y_predx[ii,1]==np.max(y_predx[ii,:]):
y_pred_x[ii]=1
elif y_predx[ii,2]==np.max(y_predx[ii,:]):
y_pred_x[ii]=2
plt.subplot(111)
plt.plot(y_pred_x[520*0:520*1],'r.-',label="pred_label")
plt.plot(ytrain_label[520*0:520*1,2],'--',label="label")
plt.legend(loc="center right")
plt.title("Chirpformation")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/57304.html
上一篇:python 中 有個類名.類名(引數) 是什么意思 求解
下一篇:萊斯校正技術
