Нейронная сеть; проблема с результатом модели - PullRequest
1 голос
/ 06 августа 2020

Я использую NN для прогнозирования промышленного производства в странах.

Мои данные следующие: (производя R)

structure(list( Word1 = c("0", "0", "0"), Word2 = c("15", "15",  "13"), Word3 = c("1", "1", "1"), Word4 = c("0", "0", "0"), Word5 = c("0", "0", "0"), IndustrialP = c(107.35586
, NA_real_, 113.66342
)), row.names = c(NA, 3L), class = "data.frame")

Я разделяю данные следующим образом:

y=df.IndustrialP
X=df.drop('IndustrialP', axis=1)
split = int(len(df)*0.8)
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]

коды для модели:

import tensorflow as tf

model = Sequential([
    Dense(32, activation='relu', input_shape=(5,)),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid'),
])
model.compile(optimizer='adam',
              loss='binary_crossentropy',
              metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=20, epochs=50)

К сожалению, я получаю loss: nan - accuracy: 0.0000e+00 для всех итераций

В чем может быть проблема?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Вот и весь холод после сохранения файла csv из R:

import pandas as pd
df = pd.read_csv('nn.csv')
df = df.fillna(df.mean()['IndustrialP'])
df.head()

    Word1   Word2   Word3   Word4   Word5   IndustrialP
0   0   15  1   0   0   107.35586
1   0   15  1   0   0   110.50964
2   0   13  1   0   0   113.66342

y=df.IndustrialP
X=df.drop('IndustrialP', axis=1)
split = int(len(df)*0.8)
X_train, X_test, y_train, y_test = X[:split], X[split:], y[:split], y[split:]

import tensorflow as tf
from keras.models import Sequential
from keras.layers import Dense

model = Sequential([
    Dense(32, activation='relu', input_shape=(5,)),
    Dense(32, activation='relu'),
    Dense(1, activation='sigmoid'),
])
model.compile(loss="mean_squared_error", optimizer="sgd")
model.fit(X_train, y_train, batch_size=20, epochs=50)

Эпоха 1/50 1/1 [================= =============] - 0 с 1 мс / шаг - потеря: 11810,6562

0 голосов
/ 06 августа 2020

В метках в вашем df пропущены значения, которые необходимо сначала вычислить:

df = df.fillna(df.mean()['IndustrialP'])

Более того, это проблема регрессии, которая требует другой функции потерь, такой как MSE или MAE.

model.compile(loss="mean_squared_error", optimizer="sgd")
...