【发布时间】: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 aninput_shape`或batch_input_shape参数。`但他有一个?!我不明白他为什么抱怨
标签: python keras deep-learning convolution