【问题标题】:Input 0 of layer sequential is incompatible with: expected axis -1 of input shape to have value 1 but received input with shape [None, 1, 16, 16, 15]层顺序的输入 0 不兼容:输入形状的预期轴 -1 具有值 1,但接收到形状为 [None, 1, 16, 16, 15] 的输入
【发布时间】:2021-09-03 05:48:40
【问题描述】:

我正在尝试对具有 6 个类的 KTH 数据集进行动作识别。我使用的模型是 Keras convo3d。我对此有点陌生,所以我不明白我哪里出错了。所有预处理工作正常,但模型存在问题。有人能帮助我吗

它是关于我不明白的形状的东西

这里是代码


(X_train, y_train) = (train_data[0], train_data[1])
print('X_Train shape:', X_train.shape)

train_set = np.zeros((num_samples, 1, img_rows, img_cols, img_depth))

for h in range(num_samples):
    train_set[h][0][:][:][:] = X_train[h, :, :, :]

patch_size = 15  # img_depth or number of frames used for each video

print(train_set.shape, 'train samples')

# CNN Training parameters

batch_size = 2
nb_classes = 6
nb_epoch = 50
#
# # convert class vectors to binary class matrices
Y_train = keras.utils.to_categorical(y_train, nb_classes)

# number of convolutional filters to use at each layer
nb_filters = [32, 32]

# level of pooling to perform at each layer (POOL x POOL)
nb_pool = [3, 3]

# level of convolution to perform at each layer (CONV x CONV)
nb_conv = [5, 5]

#Pre-processing

train_set = train_set.astype('float32')

train_set -= np.mean(train_set)

train_set /= np.max(train_set)

# # Define model
#
model = keras.Sequential()
model.add(layers.Convolution3D(nb_filters[0], kernel_size=(5, 5, 5), input_shape=(img_rows, img_cols, img_depth , 1),
                               activation='relu'))

model.add(layers.MaxPooling3D(pool_size=(nb_pool[0], nb_pool[0], nb_pool[0])))

model.add(layers.Dropout(0.5))

model.add(layers.Flatten())

model.add(layers.Dense(128, activation='relu'))

model.add(layers.Dropout(0.5))

model.add(layers.Dense(nb_classes))

model.add(layers.Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='RMSprop')
#
# # Split the data
#
X_train_new, X_val_new, y_train_new, y_val_new = train_test_split(train_set, Y_train, test_size=0.2, random_state=4)

# Train the model

hist = model.fit(X_train_new, y_train_new, validation_data=(X_val_new, y_val_new),
                 batch_size=batch_size, epochs=nb_epoch, show_accuracy=True, shuffle=True)

# Evaluate the model
score = model.evaluate(X_val_new, y_val_new, batch_size=batch_size)
print('Test score:', score[0])
print('Test accuracy:', score[1])

没有。样本数:599
X_Train 形状:(599, 16, 16, 15)

(599, 1, 16, 16, 15) 训练样本

输入形状为:(1, 16, 16, 15)

这是错误

Epoch 1/50
Traceback (most recent call last):
  File "E:/semester 6/FYP/KTH Action Recognition/method2/KTHCondaCNN/main.py", line 334, in <module>
    hist = model.fit(X_train_new, y_train_new, validation_data=(X_val_new, y_val_new),
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\training.py", line 108, in _method_wrapper
    return method(self, *args, **kwargs)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1098, in fit
    tmp_logs = train_function(iterator)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\eager\def_function.py", line 780, in __call__
    result = self._call(*args, **kwds)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\eager\def_function.py", line 823, in _call
    self._initialize(args, kwds, add_initializers_to=initializers)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\eager\def_function.py", line 696, in _initialize
    self._stateful_fn._get_concrete_function_internal_garbage_collected(  # pylint: disable=protected-access
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\eager\function.py", line 2855, in _get_concrete_function_internal_garbage_collected
    graph_function, _, _ = self._maybe_define_function(args, kwargs)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\eager\function.py", line 3213, in _maybe_define_function
    graph_function = self._create_graph_function(args, kwargs)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\eager\function.py", line 3065, in _create_graph_function
    func_graph_module.func_graph_from_py_func(
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\framework\func_graph.py", line 986, in func_graph_from_py_func
    func_outputs = python_func(*func_args, **func_kwargs)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\eager\def_function.py", line 600, in wrapped_fn
    return weak_wrapped_fn().__wrapped__(*args, **kwds)
  File "C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\framework\func_graph.py", line 973, in wrapper
    raise e.ag_error_metadata.to_exception(e)
ValueError: in user code:

    C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\training.py:806 train_function  *
        return step_function(self, iterator)
    C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\training.py:796 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\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\probook 430\miniconda3\envs\KTHCondaCNN\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\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2945 _call_for_each_replica
        return fn(*args, **kwargs)
    C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\training.py:789 run_step  **
        outputs = model.train_step(data)
    C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\training.py:747 train_step
        y_pred = self(x, training=True)
    C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\base_layer.py:975 __call__
        input_spec.assert_input_compatibility(self.input_spec, inputs,
    C:\Users\probook 430\miniconda3\envs\KTHCondaCNN\lib\site-packages\tensorflow\python\keras\engine\input_spec.py:212 assert_input_compatibility
        raise ValueError(

    ValueError: Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 1 but received input with shape [None, 1, 16, 16, 15]


Process finished with exit code 1

【问题讨论】:

    标签: tensorflow image-processing keras deep-learning conv-neural-network


    【解决方案1】:

    图像的输入形状应为(batch_size, height, width, depth, channels) (see docs),因此您的 X_train 样本似乎缺少通道维度。

    您可以在下面看到模型正在使用正确的输入尺寸。请注意,X 中的第一个 1 用于说明批量大小,而最后一个用于说明通道数。

    model = keras.Sequential()
    model.add(layers.Convolution3D(2, kernel_size=(5, 5, 5), input_shape=(16, 16, 15,1),
                                   activation='relu'))
    
    model.add(layers.MaxPooling3D(pool_size=(3, 3, 3)))
    
    model.add(layers.Dropout(0.5))
    
    model.add(layers.Flatten())
    
    model.add(layers.Dense(128, activation='relu'))
    
    model.add(layers.Dropout(0.5))
    
    model.add(layers.Dense(10))
    
    model.add(layers.Activation('softmax'))
    
    model.compile(loss='categorical_crossentropy', optimizer='RMSprop')
    
    X = tf.ones([1,16,16,15,1]) # Correct input dimensions
    model(X)
    # Output:
    # <tf.Tensor: shape=(1, 10), dtype=float32, 
    #numpy=array([[0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]], dtype=float32)>
    

    【讨论】:

    • 我已经给出了像 (1,16,16,15,1) 这样的输入形状,但现在它给出了另一个错误 ValueError: Input 0 of layer max_pooling3d is incompatible with the layer: expected ndim=5 ,发现 ndim=6。收到的完整形状:[None, 1, 12, 12, 11, 2]
    • 对不起,我可能说得不好。您的火车样本和预期输入之间的对应关系应该是 (599, 16, 16, 15, 1) - > (batch size, height, width, channels) 而不是 (599, 1, 16, 16, 15, 1) .
    • 我认为现在我在这里做错了 " train_set = np.zeros((num_samples, 1, img_rows, img_cols, img_depth)) " 我已将其转换为 ((num_samples , rows, cols, depth, 1)) 格式,但现在我不明白如何广播它,就像这段代码现在给出错误“for h in range(num_samples): train_set[h][0][:][:][:] = X_train[h, :, :, :] "
    • 如果model.fit 之前的一切都很好,您可以尝试仅重塑输入样本。 X_train = X_train.reshape(599, 16, 16, 15, 1)
    猜你喜欢
    • 2021-09-15
    • 1970-01-01
    • 2021-07-06
    • 2021-08-05
    • 1970-01-01
    • 2021-01-18
    • 2021-12-17
    • 2022-01-01
    • 2021-03-11
    相关资源
    最近更新 更多