Найти - Пользователи
Полная версия: Какой вид должен иметь массив векторов факторов и массив результатов для Keras?
Начало » Python для экспертов » Какой вид должен иметь массив векторов факторов и массив результатов для Keras?
1
Volodya
Ребята, здравствуйте!
Имеется выборка из 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]

Volodya
Volodya
Но Керас считает, что у меня не 13 факторов и соответственно 13 входов, N факторов и соответственно должно быть N входов:

ValueError: Error when checking input: expected dense_1_input to have shape (753,) but got array with shape (13,)

Попробовал ещё каждый элемент массива ответов представить в виде отдельного массива - 1 ответ отдельный массив, но результат тот же:
 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. ]]
Каждый массив внутри массива - это набор из 13 факторов. Всего таких массивов N.
 Ressolve:
[[0.]
[0.]
[0.]
...
[0.]
[0.]
[0.]]
Каждый массив - это ответ. Всего массивов N.
Но ответ Кераса тот же:
ValueError: Error when checking input: expected dense_1_input to have shape (753,) but got array with shape (13,)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB