2017-10-10 97 views
0

我使用Keras做的预测。我训练它使用数字,Y1和Y2的两个数组每个输入数量X.Keras:输出阵列被弄乱了

我希望得到一个_y1和_Y2的预测,但我不知道怎么办。

可视化显示什么。这就说得通了。检查它,它看起来像“predicition”数组为空。

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) 

回答

1

+=不是附加numpy的阵列(我认为这是你的目的)的正确方法;这里是你的第一个while循环的结果是:

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) 

即所有的阵列仍然空...

如果追加数组确实是你的目的,使用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) 

此外,您应该从模型定义中删除model = Sequential()行,因为您显然使用Keras Functional API