2017-05-16 5 views
0

最近ディープ学習に関するチュートリアルを受け取りました。アイデアは、ビデオを撮り、それを1つのフレームで分割し、それをニューラルネットワークに送ることです。なぜならそれはCNNのjpgです。しかし、私はこの写真を分類せず、さらにフロート値を得たいと思っていました。それはなぜRNNを使っているのですか?私はこれをサポートするKerasのためのlibaryを見つけました:しかし、この時点で私は立ち往生しました。 (Pythonの2.7上で実行している)CNN + RNNのエラー "__init __()は少なくとも4つの引数をとります(4が指定されています)"

エラーメッセージ:

runfile('/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/spyder/utils/site/sitecustomize.py', wdir='/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/spyder/utils/site') 

runfile('/Users/tobias/Desktop/Projekt/Speed_ANN.py', wdir='/Users/tobias/Desktop/Projekt') 
Traceback (most recent call last): 

    File "<ipython-input-14-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 38, in <module> 
    classifier.add(TimeDistributedConvolution2D(32,(3,3),input_shape = (64, 64, 3),activation = 'relu')) 

TypeError: __init__() takes at least 4 arguments (4 given) 

私は4つの引数がありますか?私は間違って何かを入れましたか?

これは私のコードです:kera-extra.pyも必要ですか?あなたが示唆したように、私はそれを変えたが、それはまだでも、それはそれは必要なすべての引数を持つエラーを持っている。これは、私が@JohanL

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

#Initialising all Libarys for Deep Learning 
from keras.models import Sequential 
from keras.layers import Flatten 
from keras.layers import Dense 
from keras.layers.extra import TimeDistributedConvolution2D 
from keras.layers.extra import TimeDistributedFlatten 
from keras.layers.extra import TimeDistributedMaxPooling2D 
""" 
#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') 
""" 


classifier = Sequential() 
# Initialising the CNN and building CNN 
classifier.add(TimeDistributedConvolution2D(32,(3,3),input_shape = (64, 64, 3),activation = 'relu')) 
classifier.add(TimeDistributedConvolution2D(16, 3, 3, border_mode='valid',activation = 'relu')) 
classifier.add(Flatten()) 
classifier.add(Dense(units = 128, activation = 'relu')) 
classifier.compile(optimizer = 'adam', loss = 'mean_squared_error',metrics = ['accuracy']) 

#Preprocessing the video data for CNN part 2 

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 = 8000, 
         epochs = 5, 
         validation_data = test_set, 
         validation_steps = 2000) 

// EDIT を追加したライブラリです。

classifier = Sequential() 
# Initialising the CNN and building CNN 
classifier.add(TimeDistributedConvolution2D(32,3,3,input_shape = (64, 64, 3),activation = 'relu')) 

今では私を与える:スタンダールCNNでそれを行うと、keras.extraライブラリにそうかもしれない何かを間違って動作しますか?ここ

classifier = Sequential() 
# Initialising the CNN and building CNN 
classifier.add(TimeDistributedConvolution2D(32,3,3,input_shape = (64, 64, 3),activation = 'relu')) 
Traceback (most recent call last): 



    File "<ipython-input-20-085e686ea1fc>", line 3, in <module> 
    classifier.add(TimeDistributedConvolution2D(32,3,3,input_shape = (64, 64, 3),activation = 'relu')) 

    File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/models.py", line 433, in add 
    layer(x) 

    File "/Users/tobias/anaconda3/envs/opencv/lib/python2.7/site-packages/keras/engine/topology.py", line 558, in __call__ 
    self.build(input_shapes[0]) 

TypeError: build() takes exactly 1 argument (2 given) 
+0

CNNは分類だけでなく、回帰も行うことができます。 –

+0

keras-extraライブラリ自体に問題はないかもしれませんが、ケラスのバージョン0.3と互換性があるようです。それ以来、ビルド機能には新しいシグネチャが追加されています。そのため、あなたの新しい問題は主ケラスパッケージのバージョンが新しくなったためです。 – JohanL

+0

ヤエ、私は参照してください。しかし、どうすればこれを解決できますか?私はCNNとRNNを組み合わせた他の図書館を見つけられませんでした。そして、私はそれをKeras – Tobias

答えて

1

TimeDistributedConvolution2Dのinit関数の定義からメソッドヘッダである:

def __init__(self, nb_filter, nb_row, nb_col, 
      init='glorot_uniform', activation='linear', weights=None, 
      border_mode='valid', subsample=(1, 1), dim_ordering='th', 
      W_regularizer=None, b_regularizer=None, activity_regularizer=None, 
      W_constraint=None, b_constraint=None, **kwargs): 

分かるように、何のデフォルト値を持っていない四つの引数(3プラスセルフ)があります。これらの4つの議論が与えられなければならない。

引数の十分な数を持っています
classifier.add(TimeDistributedConvolution2D(32,3,3,input_shape = (64, 64, 3),activation = 'relu')) 

:私はあなたが引数としてタプルを渡そうとするのではなく、していないことを前提としています。

ただし、デフォルト値を持つ引数を指定すると、エラーメッセージがちょっと変わってきます。だからあなたはこの奇妙なエラーメッセージで終わるのです。

この修正でも、これが動作するにはかなり古いバージョン(0.3)のケラスが必要であることに注意してください。利用可能な場合は別の方法を試してください。

関連する問題