почему я не могу установить размер ядра в 1d свертке? - PullRequest
0 голосов
/ 11 мая 2018

Я использую keras build 1D Convolution + LSTM. Я пытаюсь установить размер ядра = 5 следующим образом image 1D Convoluton . У меня есть данные все 72 значения и отдельно для проверки набора 6 значения. Он может установить ядро ​​на 1. Если я установлю ядро ​​на другой размер, это покажет ошибку. Это мой data.csv файл.

Это мой код.

import pandas as pd
import numpy as np
from keras.layers import LSTM
from keras.layers import Conv1D
from pandas.tseries.offsets import MonthEnd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense
import keras.backend as K
from keras.layers import Embedding
from keras.layers import GRU

df = pd.read_csv('D://data.csv',
             engine='python')


df['DATE_'] = pd.to_datetime(df['DATE_']) + MonthEnd(1)
df = df.set_index('DATE_')
df.head()

split_date = pd.Timestamp('03-01-2015')

########## Separate train and test data ##########
train = df.loc[:split_date, ['COLUMN1']]
test = df.loc[split_date:, ['COLUMN1']]

sc = MinMaxScaler()

train_sc = sc.fit_transform(train)
test_sc = sc.transform(test)

X_train = train_sc[:-1]
y_train = train_sc[1:]

X_test = test_sc[:-1]
y_test = test_sc[1:]


###################  Convolution  #######################

X_train_t = X_train[:, None]
X_test_t = X_test[:, None]

K.clear_session()
model = Sequential()

model.add(Conv1D(12, 5, activation='relu', input_shape=(None,1)))
model.add(LSTM(5,return_sequences=True))
model.add(LSTM(3)) 
model.add(Dense(1))

model.compile(loss='mean_squared_error', optimizer='adam' )
model.fit(X_train_t, y_train, epochs=400, batch_size=10, verbose=1)

y_pred = model.predict(X_test_t)

print(y_pred)
print(y_test)

Когда я запускаю, выдает ошибку вроде этой.

InvalidArgumentError (see above for traceback): computed output size would be negative

1 Ответ

0 голосов
/ 11 мая 2018

Эта строка:

model.add(Conv1D(12, 5, activation='relu', input_shape=(None,1)))

говорит о том, что вход имеет неизвестный размер пакета, а в пакете его длина 1, то есть ровно одно число.И вы пытаетесь подогнать его под 5-ядерную свертку.Если вы используете заполнение «то же самое», это приведет к выводу только одного числа (входное число умножается на среднее число вашего ядра), но с «допустимым» заполнением по умолчанию это приведет к отрицательному размеру вывода.

С input_shape = ( None, 5 ) вы получите ровно одно число (на фильтр) в качестве вывода, если у вас есть только 1 число, которое теоретически сделает размер -4 , но не имеетпрактическое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...