Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.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
Python Tensorflow keras模型_负载错误:值错误:应定义“稠密”输入的最后一个维度。没有找到`_Python_Tensorflow_Keras - Fatal编程技术网

Python Tensorflow keras模型_负载错误:值错误:应定义“稠密”输入的最后一个维度。没有找到`

Python Tensorflow keras模型_负载错误:值错误:应定义“稠密”输入的最后一个维度。没有找到`,python,tensorflow,keras,Python,Tensorflow,Keras,我构建了一个模型,它由一个预先学习的模型和一些添加到末尾的层组成。一切正常,我可以在我的数据集上训练模型,并将训练过的模型保存到文件中。但是当我尝试加载保存的模型时,我得到了以下错误。我发现这表明致密层的形状没有定义。但是,我在训练之前指定了模型的输入形状,并确保生成的密集层具有预定的形状。不知道如何解决这个问题 这就是设计的模型 import tensorflow as tf from tensorflow.keras.utils import Sequence from tensorflow

我构建了一个模型,它由一个预先学习的模型和一些添加到末尾的层组成。一切正常,我可以在我的数据集上训练模型,并将训练过的模型保存到文件中。但是当我尝试加载保存的模型时,我得到了以下错误。我发现这表明致密层的形状没有定义。但是,我在训练之前指定了模型的输入形状,并确保生成的密集层具有预定的形状。不知道如何解决这个问题

这就是设计的模型

import tensorflow as tf
from tensorflow.keras.utils import Sequence
from tensorflow.keras.applications.vgg16 import VGG16
from keras.layers.core import Dense, Dropout, Activation, Flatten
from tensorflow.keras.applications.vgg16 import VGG16

def create_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Input((320, 640, 3)))

    vgg_model = VGG16(weights='imagenet', include_top=False)

    model.add(vgg_model)

    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(256))
    model.add(tf.keras.layers.Activation('relu'))
    model.add(tf.keras.layers.Dropout(0.5))

    model.add(tf.keras.layers.Dense(128))
    model.add(tf.keras.layers.Activation('relu'))
    model.add(tf.keras.layers.Dropout(0.5))

    model.add(tf.keras.layers.Dense(1))
    model.add(tf.keras.layers.Activation('linear'))
    
    optimizer = tf.keras.optimizers.Adam(learning_rate = 0.0001)
    model.compile(loss = 'mean_squared_error', optimizer = optimizer)
  
    return model


model = create_model()
model.fit(data_generator, epochs = 1)
model.save(model_folder + '/model.h5')

在我的数据集上训练完模型后,我尝试将其加载到另一个脚本中

model = tf.keras.models.load_model(model_folder + '/model.h5')
这将导致以下错误

raise ValueError('The last dimension of the inputs to `Dense` '
ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.
我使用的是tensorflow版本2.1.0和keras版本2.3.1


知道发生这种情况的原因以及如何解决此问题吗?

您可能需要根据输入形状的状态指定输入形状

input_shape:可选形状元组,仅在include_top为False时指定(否则输入形状必须为(224, 224,3)


在您的例子中,
vgg_model=VGG16(weights='imagenet',include_top=False,input_shape=((3206403)))
可能有帮助?

建议不要将
keras
tensorflow.keras
导入混合使用。所有keras导入应该是来自tensorflow.keras.layers import Dense的
。也许可以试试吗?我做了一个更改,不将模型保存为.h5”文件,只需指定一个目录路径,就可以让tensorflow以自己喜欢的方式保存它。而且当我这样做时,工作正常。新的保存命令将是
model.save(model\u folder+'/model')