그래서, 나는 외계 행성과 외계 행성 사이를 here의 케플러 데이터를 사용하여 분류하려고합니다. 데이터 유형은 (num_of_samples, 3197)의 차원을 갖는 시계열입니다. Keras에서 1D Convolutional Layer를 사용하여이 작업을 수행 할 수 있다고 생각했습니다. 하지만 크기를 엉망으로 유지하고 확인 모델 입력 할 때 다음과 같은 오류를Keras 1D CNN : 치수를 올바르게 지정하는 방법은 무엇입니까?
있어오류를 얻을 : 예상 conv1d_1_input 모양 가지고 (없음, 3197, 1) 그러나 모양과 배열 (1, 570, 3197)
질문은 다음과 같습니다.
1. 데이터 (training_set 및 test_set)를 3D 텐서로 변환해야합니까? 그렇다면 정확한 치수는 무엇입니까?
올바른 입력 모양은 무엇입니까? 나는 1 특징을위한 3197 timesteps가다는 것을 그러나 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) **. 그럼에도 불구하고 고맙습니다! –
내가 말한 것은 당신이했던 것처럼 데이터 집합의 형태를 변경해야한다는 것이 었습니다. "매개 변수"input_shape가 이미 정확합니다. – maz
설명해 주셔서 감사합니다. 모든 당신을 위해 최고! –