Имеется выборка из N строк (записей), в каждой строке 13 факторов и 1-н ответ.
Подскажите пожалуйста какой вид должен иметь массив векторов факторов и массив результатов для Keras?
Я пытаюсь отдавать ему их в вот таком виде:
Factors: [[ 0. 2.8 0. ... 0.5 0. 208. ] [ 1. 0.6 0. ... 0.5 2.1 208. ] [ 2. 13.4 0. ... 0.5 0. 208. ] ... [149. 0. 0. ... 0. 0. 0. ] [150. 0. 0. ... 0. 0. 0. ] [151. 0. 0. ... 0. 0. 0. ]] Каждый массив внутри массива - это набор из 12 факторов. Всего таких массивов N. Ressolve: [0. 0. 0. ... 0. 0. 0.] Каждый элемент массива - это ответ. Всего элементов N.
Но Керас считает, что у меня не 13 факторов и соответственно 13 входов, а N факторов и соответственно должно быть N входов:
ValueError: Error when checking input: expected dense_1_input to have shape (753,) but got array with shape (13,)
[code python]from keras.datasets import boston_housing
from keras.models import Sequential
from keras.layers import Dense
import openpyxl
import numpy as np
from sklearn.model_selection import train_test_split
#Для начала загрузим библиотеку и выберем нужную книгу и рабочий лист:
wb = openpyxl.load_workbook(filename = 'E:/Fast_Water_project/Gidrolodge_.xlsx')
sheet_oren = wb['Or']
#считываем значение определенной ячейки
#val = sheet_oren['A1'].value
def Not_None (x):
if x!=None:
return float(str(x).replace(',','.'))
else:
return float(0)
#считываем заданный диапазон
factor_days = [Not_None(v[0].value) for v in sheet_oren['E2':'E1126']]
factor_osadky = [Not_None(v[0].value) for v in sheet_oren['F2':'F1126']]
factor_level_snow = [Not_None(v[0].value) for v in sheet_oren['G2':'G1126']]
factor_chandge_lvl_snow = [Not_None(v[0].value) for v in sheet_oren['H2':'H1126']]
factor_reserv_water = [Not_None(v[0].value) for v in sheet_oren['I2':'I1126']]
factor_frez_ground = [Not_None(v[0].value) for v in sheet_oren['J2':'J1126']]
factor_ice = [Not_None(v[0].value) for v in sheet_oren['K2':'K1126']]
factor_max_t = [Not_None(v[0].value) for v in sheet_oren['L2':'L1126']]
factor_min_t = [Not_None(v[0].value) for v in sheet_oren['M2':'M1126']]
factor_humidity = [Not_None(v[0].value) for v in sheet_oren['N2':'N1126']]
factor_deficit_humidity = [Not_None(v[0].value) for v in sheet_oren['O2':'O1126']]
factor_solar = [Not_None(v[0].value) for v in sheet_oren['P2':'P1126']]
factor_level_water = [Not_None(v[0].value) for v in sheet_oren['Q2':'Q1126']]
resolve_chandge_lvl_water = [Not_None(v[0].value) for v in sheet_oren['R2':'R1126']]
# factors_resolve=[factor_days,factor_osadky,factor_level_snow,factor_chandge_lvl_snow,factor_reserv_water,factor_frez_ground,factor_ice
# ,factor_max_t,factor_min_t,factor_humidity,factor_deficit_humidity,factor_solar,factor_level_water,resolve_chandge_lvl_water]
# for x in range(2,1126,1):
# factors_list.extend([Not_None(v[0].value) for v in sheet_oren['E'+str(x):'Q'+str(x)]])
#factors_list.append(factors)
factors_list=list()
resolve_list=list()
factors_list.append(factor_days)
factors_list.append(factor_osadky)
factors_list.append(factor_level_snow)
factors_list.append(factor_chandge_lvl_snow)
factors_list.append(factor_reserv_water)
factors_list.append(factor_frez_ground)
factors_list.append(factor_ice)
factors_list.append(factor_max_t)
factors_list.append(factor_min_t)
factors_list.append(factor_humidity)
factors_list.append(factor_deficit_humidity)
factors_list.append(factor_solar)
factors_list.append(factor_level_water)
vectors_factors=list()
for i in range(1125):
vectors_factors.append([])
for j in range(len(factors_list)):
vectors_factors[i].append(factors_list[j][i])
resolve_list=list([x for x in resolve_chandge_lvl_water])
print(vectors_factors)
print(vectors_factors)
factors=np.array(vectors_factors)
resolve=np.array(resolve_list)
print("Factors:")
print(factors)
print("Ressolve:")
print(resolve)
#(x_train, y_train), (x_test, y_test) = boston_housing.load_data(factors,resolve)
x_train, x_test, y_train, y_test = train_test_split(factors,resolve, test_size=0.33, random_state=42)
#Нормализация данных
#Вычитаем среднее значение и делим на стандартное отклонение
# Среднее значение
mean = x_train.mean(axis=0)
#Стандартное отклонение
std = x_train.std(axis=0)
x_train -= mean
x_train /= std
x_test -= mean
x_test /= std
#Создаем сеть
model = Sequential()
model.add(Dense(13, activation='relu', input_shape=(x_train.shape[0],)))
model.add(Dense(13, activation='relu'))
model.add(Dense(1))
model.compile(optimizer='adam', loss='mse', metrics=['mae'])
print(model.summary()) # архитектура нашей модели
#Обучение сети
model.fit(x_train, y_train, epochs=100, batch_size=1, verbose=2)
[/code]