Keras或Tensorflow中的哪个model.predict()正在进行数值计算?

mm5n2pyu  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(133)

我想知道的是:

我已经建立并训练了一个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过程中的数值情况。
任何帮助都将不胜感激。

gt0wga4j

gt0wga4j1#

我自己解决的,我弄错了,按照文字处理,看起来不像是keras在做别的。

相关问题