【问题标题】:Load a tensorflow model inside another one, and concatenate two models在另一个模型中加载一个 tensorflow 模型,并连接两个模型
【发布时间】:2023-03-30 06:38:01
【问题描述】:

这个想法是根据我的卷积模型创建一个反卷积模型,以查看学习像素的重要性。

Overview of the model

我遇到了无法解释的问题。 首先是当我创建了 3 个模型时,如果我训练卷积模型并测试我的自动模型,一切正常。 而如果我创建我的 3 个模型,然后我加载我的卷积模型(之前训练过),如果我测试我的自动模型,一切看起来好像我没有加载我的卷积模型的权重。 我的第一个问题是如何将权重加载到我的卷积模型中,并在我的汽车模型中考虑它们?

第二个问题可能与第一个问题有关,当我在我的汽车模型上使用 predict 时一切正常,但如果我分解它,它就不起作用。 通过分解,我的意思是用卷积模型对它进行 x_test 预测,然后使用我们得到的结果来预测 deconv 模型。将卷积模型的结果提供给 deconv 模型时出现错误。 "无效参数:您必须为占位符张量 'input_CNN' 提供一个 dtype float 的值"

创建我正在做的汽车模型:

inputs = layers.Input(shape(128,128,1),name='input_CNN')
model_auto = models.Model(inputs,model_deconv(model_conv(inputs)))

如果需要,我可以为您提供更多详细信息。

编辑:

def CNN():
   inputs = layers.Input(shape=(128,128,1),name="input_CNN")
   layers_CNN = CNN_1_layers(inputs)
   model_conv = models.Model(inputs,layers_CNN,name='CNN_1')
   model_conv.compile(loss='categorical_crossentropy',optimizer=Adam(), metrics=[accuracy"])

   inputs_deconv = layers.Inputs(shape=(1,10),name="input_CNN_deconv")
   layers_CNN_deconv = CNN_1_deconv_layers(inputs_deconv)
   model_deconv = models.Model(inputs_deconv, layers_CNN_deconv,name="CNN_1_deconv")
   model_deconv.compile(loss='categorical_crossentropy',optimize=Adam(), metrics=["accuracy"])

   model_auto = models.Model(inputs,model_deconv(model_conv(inputs)))
   model_auto.compile(loss='categorical_crossentropy',optimize=Adam(), metrics=["accuracy"])

   return model_auto, model_conv, model_deconv

我的model_conv的最后一层:

def CNN_1_layers(inputs):
   x = layers.Flattend(input_shape(1,1,10))(x)
   x = layers.Dense(10,activation='softmax')(x)

   return x

还有反卷积层:

def CNN_1_deconv_layers(inputs_deconv):
   x = layers.Reshape((1,1,10))(x)
   w1 = tf.get_variable("w1",shape=[4,4,128,10],dtype=tf.float32)
   x = layers.Lambda(lambda x: tf.nn.conv2d_transpose(x,w1,output_shape=[1,4,4,128],strides=(1,1,1,1),padding='VALID'),name='deconv_0')(x)
   ...
   return x


def apprentissage(model,nb_epoch=100):
   checkpoint = ModelCheckpoint(filepath="CNN_1.h5",monitor='vall_acc', save_best_only=True,save_weights_only=False,mode='auto')
   hist= model.fit(train_X, train_y, batch_size=128, nb_epoch=nb_epoch, validation_data=(test_X,test_y), callbacks=[checkpoint])
   return hist

我正在使用另一台离线的计算机进行编码,所以我必须手动重写所有内容,所以我正在总结一下。

【问题讨论】:

  • 对你的第一个问题:我只是有一个测试建议。创建您的 convolution 模型,加载其权重,然后制作您的 auto 模型。对于你的第二个问题:我想我以前做过类似的事情,我对此没有任何问题。如果可以,请给我们一个最小的 sn-p 来测试并帮助您编写代码
  • 我更新了。告诉我你是否需要更多东西。感谢您的帮助

标签: python tensorflow deep-learning deconvolution


【解决方案1】:

我不知道我的评论是否对您的第一个问题有所帮助(实际上我没想到您的第一个问题会发生,但无论如何我给了您一个建议)。

对于您的第二个问题,我已经测试了您的代码(您有很多拼写错误:D)并且没有问题。下面我写代码:

import numpy as np
import tensorflow as tf
from tensorflow import keras

# use below as you need
from tensorflow.keras.models import Sequential
from tensorflow.keras import layers
from tensorflow.keras.layers import *

# ----------------------

def CNN():
    inputs = layers.Input(shape=(128,128,1),name="input_CNN")
    layers_CNN = CNN_1_layers(inputs)
    model_conv = keras.Model(inputs,layers_CNN,name='CNN_1')
    model_conv.compile(loss='categorical_crossentropy',optimizer='adam', metrics=["accuracy"])

    inputs_deconv = layers.Input(shape=(1,10),name="input_CNN_deconv")
    layers_CNN_deconv = CNN_1_deconv_layers(inputs_deconv)
    model_deconv = keras.Model(inputs_deconv, layers_CNN_deconv,name="CNN_1_deconv")
    model_deconv.compile(loss='categorical_crossentropy',optimizer='adam', metrics=["accuracy"])

    model_auto = keras.Model(inputs,model_deconv(model_conv(inputs)))
    model_auto.compile(loss='categorical_crossentropy',optimizer='adam', metrics=["accuracy"])
    return model_auto, model_conv, model_deconv

# ----------------------

def CNN_1_layers(inputs):
   x = layers.Flatten(input_shape = (1,1,10))(inputs)
   x = layers.Dense(10,activation='softmax')(x)

   return x

# ----------------------

testX = np.random.rand(10, 128, 128, 1)

model_auto, model_conv, model_deconv = CNN()

print(model_auto(testX).shape)
conv_out = model_conv(testX)
deconv_out = model_deconv(conv_out)
print(deconv_out.shape)

【讨论】:

  • 我认为没有拼写错误,只是我使用的是旧版本的tensorflow。我用的是 python 2.7.6,tensorflow : 0.12.0.rc1 model.predict(testX) 和 model(testX) 有区别吗?
  • 看答案here
【解决方案2】:

谢谢 Amin,您回答了我的问题,问题来自我输入变量的类型。 (uint8 而不是 float32)即使类型错误,预测也能正常工作,但通过修复这个问题,我现在可以分解我的模型,一切正常!

只剩下加载数据的问题。 如果你告诉我你做类似的事情没有问题,我会做更多的测试。

【讨论】:

    【解决方案3】:

    好吧,我只是放弃并将我所有的库上传到最后一个似乎可以工作的库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多