当前位置: 首页 > 知识库问答 >
问题:

ValueError:“展平”输入的形状未完全定义。在尝试实施keras模型时

尉迟韬
2023-03-14

我在尝试实现keras模型时出现了以下错误:

ValueError:“展平”输入的形状未完全定义(got(None,None,512)。请确保将完整的“input\u shape”或“batch\u input\u shape”参数传递给模型中的第一层

这里可能有什么问题?

from keras import applications
from keras.preprocessing.image import ImageDataGenerator
from keras import optimizers
from keras.models import Sequential
from keras.layers import Dropout, Flatten, Dense

weights_path = '../keras/examples/vgg16_weights.h5'
top_model_weights_path = 'fc_model.h5'
img_width, img_height = 240, 320

train_data_dir = 'datasetmini/train'
validation_data_dir = 'datasetmini/VALIDATION'
nb_train_samples = nb_train_samples
nb_validation_samples = nb_validation_samples
epochs = epochs
batch_size = batch_size

model = applications.VGG16(weights='imagenet', include_top=False)
print('Model loaded.')

top_model = Sequential()
top_model.add(Flatten(input_shape=model.output_shape[1:]))
top_model.add(Dense(256, activation='relu'))
top_model.add(Dropout(0.5))
top_model.add(Dense(1, activation='sigmoid'))
top_model.load_weights(top_model_weights_path)


model.add(top_model)

for layer in model.layers[:25]:
    layer.trainable = False


model.compile(loss='binary_crossentropy',
              optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),
              metrics=['accuracy'])

train_datagen = ImageDataGenerator(
    rescale=1. / 255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1. / 255)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size=(img_height, img_width),
    batch_size=batch_size,
    class_mode='binary')

model.fit_generator(
    train_generator,
    samples_per_epoch=nb_train_samples,
    epochs=epochs,
    validation_data=validation_generator,
    nb_val_samples=nb_validation_samples)

共有1个答案

锺离飞尘
2023-03-14

根据无法微调Keras vgg16模型-输入形状问题。事实证明,在加载keras预训练模型时,应该指定输入\u形状。

还有keras。发动机训练模型不能添加新的层,所以应该构建一个新的keras。发动机顺序的按顺序建模,然后使用添加。

a MWE:

from keras import applications
from keras import Sequential
from keras.layers import Flatten, Dense, Dropout
from keras import optimizers
import numpy as np

img_width, img_height = 240, 320
model = applications.VGG16(include_top=False, weights=None, input_shape=(img_width, img_height, 3))
print('Model loaded.')

top_model = Sequential()
top_model.add(Flatten())
top_model.add(Dense(256, activation='relu'))
top_model.add(Dropout(0.5))
top_model.add(Dense(1, activation='sigmoid'))
#top_model.load_weights(top_model_weights_path)

##this will fail
##AttributeError: 'Model' object has no attribute 'add'
#model.add(top_model)

new_model = Sequential()
new_model.add(model)
new_model.add(top_model)

for layer in new_model.layers[:25]:
    layer.trainable = False

new_model.compile(loss='binary_crossentropy',
              optimizer=optimizers.SGD(lr=1e-4, momentum=0.9),
              metrics=['accuracy'])

batch_size = 8
X = np.random.randn(batch_size,240,320,3)
Y = np.random.randn(batch_size, 1)

new_model.train_on_batch(X, Y)
 类似资料:
  • 我有一个顺序模型定义如下: 我想更改此模型,以获取可变形状的输入。具体来说,第一个维度需要可变。阅读关于指定输入形状的Keras文档,我发现可以在input\u shape元组中使用None条目,其中None表示可能需要任何正整数。 对于现有模型,如果我将input\u形状从(2,4)更改为(None,4),我将收到以下错误: 我不确定,但我不相信当模型包含一个flatte()层时,可以指定可变的

  • 我正在使用Keras构建一个CNN,以下Conv1D是我的第一层: 我正在培训以下功能: 其中,train\u df是一个由两列组成的pandas数据帧,其中,对于每一行,标签是一个int(0或1),有效载荷是一个用零填充/截断为1000的浮点数组。train\U df中的培训示例总数为15641。 模型编译,但在训练期间,我得到这个错误: 我看了这篇文章,试图将输入更改为1000个浮点长列表的数

  • 我正在尝试创建一维卷积模型,但我似乎无法获得正确的输入形状。以下是我所拥有的: 我收到以下错误: 有人有什么建议吗?

  • /usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:174:不推荐使用名称tf.get_default_session。请改用tf.compat.v1.get_default_session。 /usr/local/lib/python3.6/dist-packages/keras/backend/t

  • 问题内容: 导入glib失败,原因: 我怎样才能解决这个问题? Python版本是Python 2.7.3rc2。操作系统是Debian。 问题答案: 该模块是针对使用UCS-4作为其内部表示形式构建的Python构建的。您的Python是使用UCS-2作为内部表示构建的。重建模块,或重建Python。 官方FAQ中提到了此问题。这在python问题8654中进行了深入讨论。

  • 我一直在尝试使用Keras构建一个多输入模型。我来自使用顺序模型,并且只有一个相当直接的输入。我一直在查看StackOverflow上的留档(https://keras.io/getting-started/functional-api-guide/)和一些答案(如何在Keras 2.0中“合并”顺序模型?)。基本上,我想要的是让两个输入训练一个模型。一个输入是一段文本,另一个是从该文本中提取的一