【问题标题】:Error with CNN+RNN expected to have X arguments but got (32,64,64,3)CNN+RNN 错误,预期有 X 个参数,但得到 (32,64,64,3)
【发布时间】:2017-05-17 11:46:46
【问题描述】:

我正在研究 CNN,并且一直收到错误消息: 奇怪的是,time_distributed_1_input 在新执行后总是将其编号更改为 z.b time_distributed_14_input。 我对深度学习这个话题真的很陌生,我想我在 CNN 的 output_shape 上犯了一些错误?我希望它给我一个数字作为输出。

runfile('/Users/tobias/Desktop/Projekt/Speed_ANN.py', wdir='/Users/tobias/Desktop/Projekt')
Using TensorFlow backend.
Found 16010 images belonging to 16011 classes.
Found 3613 images belonging to 3613 classes.
Epoch 1/2
Traceback (most recent call last):

  File "<ipython-input-1-b3a54cae7fa1>", line 1, in <module>
    runfile('/Users/tobias/Desktop/Projekt/Speed_ANN.py', wdir='/Users/tobias/Desktop/Projekt')

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py", line 94, in execfile
    builtins.execfile(filename, *where)

  File "/Users/tobias/Desktop/Projekt/Speed_ANN.py", line 87, in <module>
    validation_steps = 3613/32)

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/legacy/interfaces.py", line 88, in wrapper
    return func(*args, **kwargs)

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/models.py", line 1110, in fit_generator
    initial_epoch=initial_epoch)

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/legacy/interfaces.py", line 88, in wrapper
    return func(*args, **kwargs)

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/engine/training.py", line 1890, in fit_generator
    class_weight=class_weight)

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/engine/training.py", line 1627, in train_on_batch
    check_batch_axis=True)

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/engine/training.py", line 1305, in _standardize_user_data
    exception_prefix='input')

  File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/engine/training.py", line 127, in _standardize_input_data
    str(array.shape))

ValueError: Error when checking input: expected time_distributed_1_input to have 5 dimensions, but got array with shape (32, 64, 64, 3)

我的代码:

"""
Creator: Tobias
Date: 15.05.17
"""
#Initialising video preprocessing
import cv2
import numpy as np
import pandas as pd
import os,glob,shutil


#Initialising all Libarys for Deep Learning
from keras.models import Sequential
from keras.layers import Flatten,Dense,Conv2D,MaxPooling2D
from keras.layers.wrappers import TimeDistributed


def CreatClasses(folder):
        #Preprocessing the video data for CNN part 2

    os.chdir("data/training/"+folder)
    for file in glob.glob("*.jpg"):
        name = list(file)
        name = name[:-4]

        conv = " ".join(name)
        s = conv.replace(" ","")

        try:
            os.stat("data/training/train_data/"+s)
        except:
            os.makedirs(s)
            shutil.move(s+".jpg", s+"/"+s+".jpg")
def ConvertVideo():
    #Loading .txt with speed values
    speed_values = pd.read_csv('data/train.txt')

    #Loading Video in Python
    video = cv2.VideoCapture('data/train.mp4')
    success,image = video.read()
    count = 0
    success = True
    #Splitting video in single images in jpg
    while success:
        success,image = video.read()
        #cv2.imwrite('data/video_jpg/',speed_values[success],'.jpg')
        cv2.imwrite("data/video_jpg/%f.jpg" %speed_values.iloc[count,:].values,image) 
        count += 1 
    print('Video Succefully Converted to jpg')


#ConvertVideo()
#CreatClasses("test_data")

classifier = Sequential()
classifier.add(TimeDistributed(Conv2D(64, (3, 3)),input_shape=(None,64, 64, 3)))
classifier.add(TimeDistributed(MaxPooling2D(pool_size = (2, 2))))
classifier.add(TimeDistributed(Flatten()))
classifier.add(TimeDistributed(Dense(units = 16011)))
classifier.compile(optimizer = 'adam', loss = 'mean_squared_error',metrics = ['accuracy'])



from keras.preprocessing.image import ImageDataGenerator

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

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('data/training/train_data',
                                                 target_size = (64, 64),
                                                 batch_size = 32,
                                                 class_mode = 'binary')

test_set = test_datagen.flow_from_directory('data/training/test_data',
                                            target_size = (64, 64),
                                            batch_size = 32,
                                            class_mode = 'binary')

classifier.fit_generator(training_set,
                         steps_per_epoch =16010/32,
                         epochs = 2,
                         validation_data = test_set,
                         validation_steps = 3613/32)

classifier.save("Modell.h5")

这里是汇总功能的信息:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
time_distributed_1 (TimeDist (None, 10, 62, 62, 64)    1792      
_________________________________________________________________
time_distributed_2 (TimeDist (None, 10, 31, 31, 64)    0         
_________________________________________________________________
time_distributed_3 (TimeDist (None, 10, 61504)         0         
_________________________________________________________________
time_distributed_4 (TimeDist (None, 10, 16011)         984756555 
=================================================================
Total params: 984,758,347
Trainable params: 984,758,347
Non-trainable params: 0
_________________________________________________________________

我会很高兴得到任何帮助 问候托拜厄斯

【问题讨论】:

  • 删除None,在定义模型时不应该使用它。只使用input_shape = (64,64,3) -- 不确定这是否是唯一的问题。
  • 哦,没有应该是我刚刚尝试过的数字。我需要 4 个值,因为它是一个带有时间步长的 CNN
  • 你是对的 :)
  • 是的,但它期待哪个第五维度?我已经有了第 3 次和第 4 次的 img 形状?
  • classifier.add(TimeDistributed(Conv2D(64, (3, 3)),input_shape=(None,64, 64, 3))) 我写错了括号。现在它抱怨ValueError: The first layer in a Sequential model must get an input_shape`或batch_input_shape参数。`但他有一个?!我不明白他为什么抱怨

标签: python keras deep-learning convolution


【解决方案1】:

发布model.summary() 可能是个好主意。

听起来您的模型需要一个形状像 (BatchSize, TimeSteps, 64,64,3) 的输入 - 这是 5 个维度。

但是你传递给它一个形状像(32,64,64,3) 的数组(来自flow_from_directory)。

数组缺少一维。

  • 是 32 个示例,每个示例都有一个时间步长吗?将数组重塑为 (32,1,64,64,3) 或在模型的开头使用 Reshape((1,64,64,3)) 层。

  • 它是 1 个具有 32 个时间步长的样本吗?将数组重塑为 (1,32,64,64,3) 或在模型的开头使用 Reshape((32,64,64,3)) 层。

  • 还有别的吗?你必须解释你的数据意味着什么,这样我们才能更好地分析它。

【讨论】:

  • 我有一张 rgb 图片。为了更快的处理,应该按比例缩小。此图像应以 1 的 time_steps 传递。我在 jpg 中的每一帧都分割了一个视频,并用当前速度(它是一辆汽车行驶)对其进行标记。它应该拍照并在另一个视频中预测另一辆车的速度。
  • 根据您的要求,我将摘要信息添加到我的主要帖子中
猜你喜欢
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 2021-08-22
  • 2019-08-28
  • 1970-01-01
  • 2023-03-11
相关资源
最近更新 更多