简体   繁体   English

Model 没有属性“形状” - VGG16 Model

[英]Model has no attribute 'shape' - VGG16 Model

I'm trying to use VGG16 model to classify the RAVDESS video_song dataset.我正在尝试使用VGG16 model 对 RAVDESS video_song 数据集进行分类。 To do this, i have extracted 3 frames per second from each video.为此,我从每个视频中每秒提取 3 帧。 Then, i use InceptionV3 to extract features from this frames, saving it to a csv file.然后,我使用 InceptionV3 从这些帧中提取特征,将其保存到 csv 文件中。 Now, i'm trying to train a model to predict emotions based on a given input.现在,我正在尝试训练 model 来根据给定的输入预测情绪。

I'm using train_test_split to split my data into random train and test subsets:我正在使用train_test_split将我的数据拆分为随机训练和测试子集:

p_x_train, p_x_test, p_y_train, p_y_test = train_test_split(deep_features_csv, emotion_classes_csv, test_size=.3, random_state=42, stratify=emotion_classes_csv)

x_train = preprocess_input(p_x_train.values)
x_test = preprocess_input(p_x_test.values)
y_train = preprocess_input(p_y_train.values)
y_test = preprocess_input(p_y_test.values)

After this, i build my model, which, in this case is VGG16, and try to fit it:在此之后,我构建了我的 model,在这种情况下是 VGG16,并尝试安装它:

emotions = { 0: "neutral", 1: "calm", 2: "happy", 3: "sad", 4: "angry", 5: "fearful" }

num_classes = len(emotions)

input_tensor = Input(shape=x_train[0].shape, name='input_tensor')

vgg16 = VGG16(weights='imagenet', include_top=False)
vgg16.trainable = False

x = tf.keras.layers.Flatten(name='flatten')(vgg16)
x = tf.keras.layers.Dense(512, activation='relu', name='fc1')(vgg16)
x = tf.keras.layers.Dense(512, activation='relu', name='fc2')(x)
x = tf.keras.layers.Dense(10, activation='softmax', name='predictions')(x)
new_model = tf.keras.models.Model(inputs=vgg16.input, outputs=x)
new_model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])

hist_vgg16 = new_model.fit(x_train, y_train,
    batch_size = 32,
    epochs = 50,
    verbose = 1,
    validation_data = (x_test, y_test)
)

The shape of x_train[0] is (2048,) . x_train[0]的形状是(2048,)

I'm running this code on (google colab)[colab.research.google.com], and this is the error i got:我在(google colab)[colab.research.google.com] 上运行此代码,这是我得到的错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-30-311ade600318> in <module>()
      8 vgg16.trainable = False
      9 
---> 10 x = tf.keras.layers.Flatten(name='flatten')(vgg16)
     11 x = tf.keras.layers.Dense(512, activation='relu', name='fc1')(vgg16)
     12 x = tf.keras.layers.Dense(512, activation='relu', name='fc2')(x)

2 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py in assert_input_compatibility(input_spec, inputs, layer_name)
    164         spec.min_ndim is not None or
    165         spec.max_ndim is not None):
--> 166       if x.shape.ndims is None:
    167         raise ValueError('Input ' + str(input_index) + ' of layer ' +
    168                          layer_name + ' is incompatible with the layer: '

AttributeError: 'Model' object has no attribute 'shape'

Can someone help me here?有人可以在这里帮助我吗?

The problem is that in error line, you are introducing your VGG16 model as input, and what you want is to introduce the output of last layer, right?问题是在错误行中,您正在引入您的 VGG16 model 作为输入,而您想要引入最后一层的 output,对吗?

So, you should change the next lines:因此,您应该更改下一行:

x = tf.keras.layers.Flatten(name='flatten')(vgg16.output) 
x = tf.keras.layers.Dense(512, activation='relu', name='fc1')(x) #I suppose the input of this layer, is the output of Flatten

One other thing, your input_tensor seems to be not used, am i wrong?另一件事,您的 input_tensor 似乎没有使用,我错了吗? Should it be the input of your vgg16 or you want a multi-input model?它应该是您的 vgg16 的输入还是您想要一个多输入 model?

If your input_tensor is the input of VGG16, so you have to change:如果您的 input_tensor 是 VGG16 的输入,那么您必须更改:

vgg16 = VGG16(input_tensor=input_tensor, weights='imagenet', include_top=False)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM