Use InceptionV3 Get ValueError:形状(无,9)和(无,13,7,2048)不兼容

2024-09-30 10:35:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用接收v3来训练我的形象。但还是得到了这个ValueError: Shapes (None, 9) and (None, 13, 7, 2048) are incompatible

input image size(RGB) : 480 x 270 (Width x Height)

output label: [0,0,0,0,0,0,0,0,1] (9 output)

套餐:

  • tensorflow gpu 2.2.0
  • numpy 1.19.1

这是我的代码:

import numpy as np
from grabscreen import grab_screen
import cv2
import time
import pandas as pd
from random import shuffle
import tensorflow as tf 
from tensorflow.keras.applications.xception import Xception
from tensorflow.keras.applications.inception_v3 import InceptionV3
from tensorflow.keras import optimizers


FILE_I_END = 201

WIDTH = 480
HEIGHT = 270
LR = 1e-3
EPOCHS = 1

MODEL_NAME = 'model.h5'
PREV_MODEL = ''

LOAD_MODEL = False

wl = 0
sl = 0
al = 0
dl = 0

wal = 0
wdl = 0
sal = 0
sdl = 0
nkl = 0

w = [1,0,0,0,0,0,0,0,0]
s = [0,1,0,0,0,0,0,0,0]
a = [0,0,1,0,0,0,0,0,0]
d = [0,0,0,1,0,0,0,0,0]
wa = [0,0,0,0,1,0,0,0,0]
wd = [0,0,0,0,0,1,0,0,0]
sa = [0,0,0,0,0,0,1,0,0]
sd = [0,0,0,0,0,0,0,1,0]
nk = [0,0,0,0,0,0,0,0,1]

model = InceptionV3(include_top=False, weights=None,input_shape=(WIDTH,HEIGHT,3), classes=9,classifier_activation='softmax')

if LOAD_MODEL:
    model.load(PREV_MODEL)
    print('We have loaded a previous model!!!!')


# iterates through the training files


for e in range(EPOCHS):
    #data_order = [i for i in range(1,FILE_I_END+1)]
    data_order = [i for i in range(1,FILE_I_END+1)]
    shuffle(data_order)
    for count,i in enumerate(data_order):

        try:
            file_name = 'training_data-{}.npy'.format(i)
            # full file info
            train_data = np.load(file_name,allow_pickle=True)
            print('training_data-{}.npy'.format(i),len(train_data))
            
            train = train_data[:-50]
            test = train_data[-50:]

            X = np.array([i[0] for i in train]).reshape(-1,WIDTH,HEIGHT,3)
            Y = np.array([i[1] for i in train])

            test_x = np.array([i[0] for i in test]).reshape(-1,WIDTH,HEIGHT,3)
            test_y = np.array([i[1] for i in test])

            learning_rate = 0.001
            opt = optimizers.Adam(lr=LR, decay=1e-5)

            model.compile(loss='categorical_crossentropy',
                          optimizer=opt,
                          metrics=['accuracy'])

            model.fit(x=X, y=Y, epochs=1, verbose=1, validation_data=(test_x,test_y), batch_size=None)


            if count%10 == 0:
                print('SAVING MODEL!')
                model.save(MODEL_NAME)

        except Exception as e:
            print(str(e))

我得到了这个错误:


    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\engine\training.py:806 train_function  *
        return step_function(self, iterator)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\engine\training.py:796 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1211 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2585 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\engine\training.py:789 run_step  **
        outputs = model.train_step(data)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\engine\training.py:749 train_step
        y, y_pred, sample_weight, regularization_losses=self.losses)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\engine\compile_utils.py:204 __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\losses.py:149 __call__
        losses = ag_call(y_true, y_pred)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\losses.py:253 call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
        return target(*args, **kwargs)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\losses.py:1535 categorical_crossentropy
        return K.categorical_crossentropy(y_true, y_pred, from_logits=from_logits)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper
        return target(*args, **kwargs)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\keras\backend.py:4687 categorical_crossentropy
        target.shape.assert_is_compatible_with(output.shape)
    C:\Users\codingan\Anaconda3\envs\gta5\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1134 assert_is_compatible_with
        raise ValueError("Shapes %s and %s are incompatible" % (self, other))

    ValueError: Shapes (None, 9) and (None, 13, 7, 2048) are incompatible

你对我有什么解决办法吗

非常感谢你


Tags: pyimportfordatalibpackagestensorflowsite
1条回答
网友
1楼 · 发布于 2024-09-30 10:35:16

如果设置include_top=False,模型的输出将为4D(source):

pooling: Optional pooling mode for feature extraction when include_top is False. None (default) means that the output of the model will be the 4D tensor output of the last convolutional block. avg means that global average pooling will be applied to the output of the last convolutional block, and thus the output of the model will be a 2D tensor. max means that global max pooling will be applied.

您指定了类的数量,但classes仅在include_top=True满足以下条件时才处于活动状态:

classes: optional number of classes to classify images into, only to be specified if include_top is True, and if no weights argument is specified. Default to 1000.

classifier_activation来说也是这样:

classifier_activation: A str or callable. The activation function to use on the "top" layer. Ignored unless include_top=True. Set classifier_activation=None to return the logits of the "top" layer.

tl;dr如果设置include_top=True,您应该会没事的

相关问题 更多 >

    热门问题