2017-10-10 1 views
0

J'utilise Keras pour faire une prédiction. Je l'entraîne en utilisant deux tableaux de nombres, Y1 et Y2 pour chaque nombre d'entrée X.Keras: Le tableau de sortie est foiré

Je veux obtenir une prédiction d'un _Y1 et un _Y2, mais je ne sais pas comment.

La visualisation ne montre rien. Ça a du sens. En le vérifiant, il semble que le tableau "predicition" soit vide.

import numpy as np 
import pandas 
import math 
import random 
from keras.models import Sequential, Model 
from keras.layers import Input, Dense 
from keras.wrappers.scikit_learn import KerasRegressor 
from sklearn.model_selection import cross_val_score 
from sklearn.model_selection import KFold 
from sklearn.preprocessing import StandardScaler 
from sklearn.pipeline import Pipeline 
import graphviz 
import pydot 
import matplotlib.pyplot as plt 

X = np.array([]) 
Y_int = np.array([]) 
Y1 = np.array([]) 
Y2 = np.array([]) 


count = -1 

while count < 1: 
    count += 0.001 
    X += np.array([count]) 
    i = (math.sin(count)) 
    Y_int += np.array([i]) 
    if i > 1 or i < -1: 
     o = 1 
     u = 1/i 
    else: 
     o = i 
     u = 1 
    Y1 += np.array([o]) 
    Y2 += np.array([u]) 

length = len(X) 

# define base model 
def baseline_model(): 
    # create model 
    model = Sequential() 
    inp = Input((1,)) 
    x = Dense(100, kernel_initializer='lecun_normal', activation='tanh')(inp) 
    out1 = Dense(1, kernel_initializer='lecun_normal')(x) 
    out2 = Dense(1, kernel_initializer='lecun_normal')(x) 
    model = Model(inp, [out1,out2]) 
    # Compile model 
    model.compile(loss='mean_squared_error', optimizer='adam') 
    return model 

estimator = baseline_model(); 
estimator.fit(X, [Y1, Y2], batch_size = 20, epochs = 1, verbose = 0) 

plt.axis([-1, 1, -1, 1]) 
plt.ion() 

while True: 
    estimator.fit(X, [Y1, Y2], batch_size = 20, epochs = 1, verbose = 0) 
    prediction = estimator.predict(X) 
    plt.clf() 
    plt.plot(X, Y_int) 
    plt.plot(X, prediction) 
    plt.pause(0.001) 

Répondre

1

+= est pas la bonne façon pour les tableaux annexant numpy (Je suppose que ceci est votre but); voici le résultat de votre première while boucle:

count = -1 

while count < 1: 
    count += 0.001 
    X += np.array([count]) 
    i = (math.sin(count)) 
    Y_int += np.array([i]) 
    if i > 1 or i < -1: 
     o = 1 
     u = 1/i 
    else: 
     o = i 
     u = 1 
    Y1 += np.array([o]) 
    Y2 += np.array([u]) 

length = len(X) 

length 
# 0 
X 
# array([], dtype=float64) 
Y1 
# array([], dtype=float64) 
Y2 
# array([], dtype=float64) 

-à-dire tous vos tableaux sont encore vides ...

Si les tableaux annexant est en effet votre objectif, utilisez la méthode numpy.append:

count = -1 

while count < 1: 
    count += 0.001 
    X = np.append(X, np.array([count])) 
    i = math.sin(count)) 
    Y_int = np.append(Y_int, np.array([i])) 
    if i > 1 or i < -1: 
     o = 1 
     u = 1/i 
    else: 
     o = i 
     u = 1 
    Y1 = np.append(Y1, np.array([o])) 
    Y2 = np.append(Y2, np.array([u])) 

length = len(X) 

length 
# 2000 
len(Y1), len(Y2), len(Y_int) 
# (2000, 2000, 2000) 

En outre, vous devez supprimer la ligne model = Sequential() de votre définition de modèle, puisque vous utilisez apparemment le Keras Functional API.