我想知道的是:
我已经建立并训练了一个CNN模型,并且已经能够计算预测,但是我想知道在预测步骤中数字化发生的过程的细节。
我尝试的是:
(1)使用训练后的Keras模型计算得分。
(2)对我的CNN进行编码,计算得分,并将其与(1)(→差异)进行比较。
(3)在GitHub上检查了Keras和Tensorflow的源代码,并研究了Keras的predict()和我的CNN在数值处理方面的差异。
我在卡拉斯做了一个模型。
model = Sequential()
mode.add(Conv2D(20,kernel_size=(1,5), strides=(1,1), padding='valid', input_shape=(24,13,1), activation='relu'))
mode.add(Conv2D(20,kernel_size=(1,9), strides=(1,1), padding='valid', activation='relu'))
mode.add(Conv2D(20,kernel_size=(24,1), strides=(1,1), padding='valid', activation='relu'))
mode.add(Flatten())
mode.add(Dense(20,activation='relu'))
mode.add(Dense(2,activation='sigmoid'))
model.load_weights(model_path / '[model_filename].h5')
model.summary()
另一方面,我用这种方法创建了我的预测CNN代码,我省略了代码,但我成功地得到了内核和偏差的值。
我的CNN代码(仅限密集和卷积)
def mydense(ind, ker, bia, func):
tem_dense = np.dot(ker.T, ind) + bia
return func(tem_dense)
def myconv(ind, ker, bia, func):
# input sample data's shape
H = ind.shape[0]
W = ind.shape[1]
# kernel' shape
Hf = ker.shape[0]
Wf = ker.shape[1]
K = ker.shape[3]
# result of convolution
u = np.zeros((H - Hf + 1, W - Wf + 1, K))
# output
z = np.zeros((u.shape))
for k in range(0,K):
for n in range(0,W - Wf + 1):
for m in range(0, H - Hf + 1):
u[m,n,k] = (ind[m:m+Hf, n:n+Wf, :] * ker[:,:,:,k] + bia[k]).sum()
z = np.array([func(i) for i in u])
return z
结果与model.predict()有很大不同。
我已经调查过的内容:
我已经进一步研究了predict()和其他源代码,但我需要了解情况的人的帮助。
与卷积过程(Conv2D或Conv)一样,我也想详细了解Dense过程中的数值情况。
任何帮助都将不胜感激。
1条答案
按热度按时间gt0wga4j1#
我自己解决的,我弄错了,按照文字处理,看起来不像是keras在做别的。