Я собираюсь создать свою самую первую модель самостоятельно. После выполнения нескольких уроков я обнаружил, что это не так просто, как я ожидал. Тем не мение. На данный момент я задаюсь вопросом о том, как определить размеры input_shape. Я получил несколько жалоб на неправильные входные данные для слоев. Я изменил некоторые числа, и теперь я могу скомпилировать, но я не совсем понял, что я сделал, соответственно, я хотел бы знать, как правильно определить input_shape. Мои входные данные представляют собой массивный массив, который я сгенерировал из кадра данных с 16 переменными, но для начала я использую только один, соответственно два (один столбец времени). Сначала я думал, что размеры будут
X_train1.shape
(1700, 2)
, но это не сработало. Тогда я решил взять число два, которое работало до последнего слоя, который состоял только из одного нейрона. Следовательно, я получил соответствующую ошибку, говорящую мне, что слой ожидал ввода измерения два вместо одного. Поэтому я увеличил количество нейронов до двух, и теперь оно работает. Но, насколько я знаю, выходной слой с двумя нейронами используется только для целей классификации, к которым я не стремлюсь.
TL; DR: Как определить input_shape, особеннокогда изображения не используются в качестве входных данных (что почти всегда имеет место в каждом уроке ..)?
Фактическая сеть соответствует этому уроку :
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_31 (Dense) (None, 2) 6
_________________________________________________________________
dense_32 (Dense) (None, 1) 3
_________________________________________________________________
dense_33 (Dense) (None, 2) 4
_________________________________________________________________
dense_34 (Dense) (None, 2) 6
=================================================================
Total params: 19
Trainable params: 19
Non-trainable params: 0
type(X_train1)
numpy.ndarray
# shape of input
X_train1.shape
(1700, 2)
# Build model
model= Sequential()
model.add(Dense(2, input_shape=(2,), activation= "relu"))
model.add(Dense(1, activation= "relu"))
model.add(Dense(2, activation= "relu"))
model.add(Dense(2))
model.summary() #Print model Summary
# Compile model
model.compile(loss= "mean_squared_error" , optimizer="adam", metrics=["mean_squared_error"])
# Fit Model
model.fit(X_train1, y_train1, epochs=2)
X_train1
array([[-1.73103225e+00, 1.67925250e+00],
[-1.72899455e+00, 1.70540111e+00],
[-1.72695684e+00, 1.51829725e+00],
[-1.72491913e+00, 1.22942045e+00],
(...)
[ 1.72491913e+00, -1.34502350e+00],
[ 1.72695684e+00, -1.21882561e+00],
[ 1.72899455e+00, -5.57245295e-01],
[ 1.73103225e+00, 3.86950632e-01]])
фрейм данных:
timestamp A_phsA
2018-02-05 14:00:00 1.517839e+09 856.436487
2018-02-05 15:00:00 1.517843e+09 859.653339
2018-02-05 16:00:00 1.517846e+09 836.635463
2018-02-05 17:00:00 1.517850e+09 801.097284
2018-02-05 18:00:00 1.517854e+09 794.855960
... ... ...
2018-05-01 08:00:00 1.525162e+09 563.391437
2018-05-01 09:00:00 1.525165e+09 602.101665
2018-05-01 10:00:00 1.525169e+09 648.061104
2018-05-01 11:00:00 1.525172e+09 695.000131
2018-05-01 12:00:00 1.525176e+09 715.601925
X_train1_raw = df_train1_raw.iloc[:, 1:2].values
for train_index, test_index in tscv.split(X_train1_raw):
X_train1, X_test1 = scaler.fit_transform(X_train1_raw[train_index]), scaler.fit_transform(X_train1_raw[test_index])
y_train1, y_test1 = scaler.fit_transform(y_train1_raw[train_index]), scaler.fit_transform(y_train1_raw[test_index])