Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在Keras中,如何将序列模型预先设置为预训练模型?_Image_Keras_Tensorflow2.0_Prepend - Fatal编程技术网

Image 在Keras中,如何将序列模型预先设置为预训练模型?

Image 在Keras中,如何将序列模型预先设置为预训练模型?,image,keras,tensorflow2.0,prepend,Image,Keras,Tensorflow2.0,Prepend,我想在像nasnet_mobile这样的预训练模型前面放置一个4层密集网络。我尝试过几种不同的方法,但它们都会让人头疼(又称错误)。在keras+tensorflow2中,什么方法可以做到这一点 想法: 是否有一些“标志”,我必须将稠密的输出指定为整数或图片 在预训练模型中是否有一些“标志”我必须允许它连接 我是否需要手动制作一个预训练的克隆,加载预训练的权重,然后尝试上面的一个;也许预先训练的人和被创造的人是不同的阶级?(更新)如果我正在复制,是否有一种简单的方法来确保我获得相同的结构,以便

我想在像nasnet_mobile这样的预训练模型前面放置一个4层密集网络。我尝试过几种不同的方法,但它们都会让人头疼(又称错误)。在keras+tensorflow2中,什么方法可以做到这一点

想法:

  • 是否有一些“标志”,我必须将稠密的输出指定为整数或图片
  • 在预训练模型中是否有一些“标志”我必须允许它连接
  • 我是否需要手动制作一个预训练的克隆,加载预训练的权重,然后尝试上面的一个;也许预先训练的人和被创造的人是不同的阶级?(更新)如果我正在复制,是否有一种简单的方法来确保我获得相同的结构,以便在设置_权重(get_weights(…)时不会出错

  • 以上都不是

代码:

#LIBRARIES
import numpy as np
from tensorflow import keras
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Dense, Reshape, Conv2D, MaxPool2D , Flatten, Input


my_input_shape = (224,224,3)

#DENSE MODEL
my_inputs = Input(shape=my_input_shape)

hidden_1 = Dense(units=8, activation='relu')(my_inputs)


#make the output layer
hidden_2= Dense(units=np.product(my_input_shape), 
                           activation='sigmoid')(hidden_1)

transformed = keras.layers.Reshape(my_input_shape,)(hidden_2)  

dense_model = Model(inputs=my_inputs, outputs=transformed)

#PRETRAINED MODEL
pretrained_model = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_shape=my_input_shape)

#Option 1
combined_model_1 = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_tensor=transformed)

#Option 2
combined_model_2 = Model(inputs=dense_model.input, outputs=pretrained_model.output)

#Option 3a
combined_model_3a = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_tensor=my_input_shape)(dense_model)
#Option 3b
combined_model_3b = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False)(dense_model)

#Option 4
combined_model_4 = keras.applications.nasnet.NASNetMobile(weights = 'imagenet', 
                                                            include_top = False,
                                                            input_tensor=dense_model)
问题:
给定上面的代码,我想在预训练模型前面菊花链密集模型。我想将图像输入到稠密中,让它在稠密中传播,然后作为预训练的输入,并经过预训练。

为什么不这样做:

inp = Input(shape=my_input_shape)
x = dense_model(inp)
x = pretrained_model(x)

final_model = Model(inp, x)

如果您提供完整的代码示例,我们可能会提供帮助。到目前为止,我不知道你哪里做错了,但对我来说,很明显你做错了。如果我有相关但可能“难闻”的演示代码,那可以吗?是的,当然,任何重现问题的代码都会更新。这是否足够?我有5种左右不同的方法,但都不起作用。我不想让它不起作用。我想让它发挥作用如果有任何故障模式似乎特别适合“复活”,那么请告诉我,我将尝试进行适当的更新。除了选项5中令人筋疲力尽的重新创建代码外,其他所有故障模式都进行了更新。我尝试了一下,看起来没有错误。给我10分钟,如果较大的代码没有失败,那么你就成功了。再次感谢你的帮助和时间。