私がしようとしているのは、得られたケプラーデータを用いて、外来植物と非外来植物を分類することです。here。データ型は、次元が(、num_of_samples、3197)の時系列です。私はこれがKerasの1D畳み込みレイヤーを使って実行できることを理解しました。しかし、私は寸法をいじり続けると、次のエラーにモデル入力をチェックしませんKeras 1D CNN:ディメンションを正しく指定する方法は?
を(なし、3197、1)の形状を有することが期待conv1d_1_inputをしかし形状を持つ配列を得たがエラーを取得:(1、570、3197)
質問:
1.データ(training_setとtest_set)を3Dテンソルに変換する必要がありますか?はいの場合、正しい次元は何ですか?
2.正しい入力形状は何ですか?私は1つの機能に対して3197のタイムステップを持っていることを知っていますが、the documentationはTFやtheanoバックエンドを使用するかどうかを指定していないので、まだ頭痛があります。
ところで、私はTFのバックエンドを使用しています。あらゆる種類の助けは大いに感謝されます!ありがとう!
"""
Created on Wed May 17 18:23:31 2017
@author: Amajid Sinar
"""
import matplotlib.pyplot as plt
import pandas as pd
plt.style.use("ggplot")
import numpy as np
#Importing training set
training_set = pd.read_csv("exoTrain.csv")
X_train = training_set.iloc[:,1:].values
y_train = training_set.iloc[:,0:1].values
#Importing test set
test_set = pd.read_csv("exoTest.csv")
X_test = test_set.iloc[:,1:].values
y_test = test_set.iloc[:,0:1].values
#Scale the data
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)
#Convert data into 3d tensor
X_train = np.reshape(X_train,(1,X_train.shape[0],X_train.shape[1]))
X_test = np.reshape(X_test,(1,X_test.shape[0],X_test.shape[1]))
#Importing convolutional layers
from keras.models import Sequential
from keras.layers import Convolution1D
from keras.layers import MaxPooling1D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers.normalization import BatchNormalization
#Convolution steps
#1.Convolution
#2.Max Pooling
#3.Flattening
#4.Full Connection
#Initialising the CNN
classifier = Sequential()
#Input shape must be explicitly defined, DO NOT USE (None,shape)!!!
#1.Multiple convolution and max pooling
classifier.add(Convolution1D(filters=8, kernel_size=11, activation="relu", input_shape=(3197,1)))
classifier.add(MaxPooling1D(strides=4))
classifier.add(BatchNormalization())
classifier.add(Convolution1D(filters=16, kernel_size=11, activation='relu'))
classifier.add(MaxPooling1D(strides=4))
classifier.add(BatchNormalization())
classifier.add(Convolution1D(filters=32, kernel_size=11, activation='relu'))
classifier.add(MaxPooling1D(strides=4))
classifier.add(BatchNormalization())
#classifier.add(Convolution1D(filters=64, kernel_size=11, activation='relu'))
#classifier.add(MaxPooling1D(strides=4))
#2.Flattening
classifier.add(Flatten())
#3.Full Connection
classifier.add(Dropout(0.5))
classifier.add(Dense(64, activation='relu'))
classifier.add(Dropout(0.25))
classifier.add(Dense(64, activation='relu'))
classifier.add(Dense(1, activation='sigmoid'))
#Configure the learning process
classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics=["accuracy"])
#Train!
classifier.fit_generator(X_train, steps_per_epoch=X_train.shape[0], epochs=1, validation_data=(X_test,y_test))
score = classifier.evaluate(X_test, y_test)
をご回答いただきありがとうございます。 これを試した後、私は正しいパラメータを得ました: dataset = np.reshape(X_train、**(570,3197,1)**) しかし、入力形状は**(なし、3197 、1)**ではなく、**(3197,1)**。 それにもかかわらず、大変ありがとうございます! –
私が言ったのは、あなたがしたようにあなたのデータセットの形を変えなければならないということでした。 "parameter" input_shapeはすでに正しいです。 – maz
私は分かりました、ありがとう!すべてあなたのために最高! –