【问题标题】:unknown problem(S) in a keras neural network for multi-label regression用于多标签回归的 keras 神经网络中的未知问题(S)
【发布时间】:2019-09-15 11:17:31
【问题描述】:

我是神经网络和 keras 的新手,在使用我的真实数据之前尝试确保一切正常。

所以这里是一个有 1000 个样本、三个输入和三个输出的神经网络

X.csv 包含:(索引重复三遍)

1,1,1

2,2,2

直到 1000,1000,1000

Y.csv 包含三个标签:(index,the index*5,he index/5)

1,5,0.2

2,10,0.4

直到 1000,5000,200

random.seed(42)
X = np.genfromtxt(r'C:\Users\boss\Desktop\X.csv' , delimiter=',')
y = np.genfromtxt(r'C:\Users\boss\Desktop\Y.csv' , delimiter=',')
y1,y2,y3 = y[:, 0:1],y[:, 1:2],y[:, 2:]
X_train, X_test, y1_train, y1_test, y2_train, y2_test, y3_train, y3_test = train_test_split(X, y1,y2,y3, test_size =0.3, random_state = 0)
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

inp = Input((3,)) 
x = Dense(10, activation='relu')(inp)
x = Dense(10, activation='relu')(x)
x = Dense(10, activation='relu')(x)
out1 = Dense(1,  activation='linear')(x)
out2 = Dense(1,  activation='linear')(x)
out3 = Dense(1,  activation='linear')(x)

model = Model(inputs=inp, outputs=[out1,out2,out3])
model.compile(optimizer = "adam", loss = 'mse')
model.fit(x=X_train, y=[y1_train,y2_train,y3_train], batch_size=100, epochs=10, verbose=1, validation_split=0.3,  shuffle=True)            

#plot predicted data vs real data
y_pred = model.predict(X_test)
plt.plot(y1_test, color = 'red', label = 'Real data')
plt.plot(y_pred[0], color = 'blue', label = 'Predicted data')
plt.title('y1')
plt.legend()
plt.show()

plt.plot(y2_test, color = 'red', label = 'Real data')
plt.plot(y_pred[1], color = 'blue', label = 'Predicted data')
plt.title('y2')
plt.legend()
plt.show()

plt.plot(y3_test, color = 'red', label = 'Real data')
plt.plot(y_pred[2], color = 'blue', label = 'Predicted data')
plt.title('y3')
plt.legend()
plt.show()

不幸的是,损失和验证损失都很大(数百万) 另一个问题是,尽管使用了随机种子,但每次结果都不同

【问题讨论】:

    标签: python keras neural-network regression


    【解决方案1】:

    高损失的一个可能原因是 epoch 数量少——只有 10 个很少能得到好的结果。尝试 100、1000 等,看看结果如何改善。

    对于可重现的随机数生成,您还需要为 Numpy 和 TensorFlow 指定种子(如果您使用的是 TensorFlow 后端,这是默认设置)。这是this article给出的例子:

    from numpy.random import seed
    seed(1)
    from tensorflow import set_random_seed
    set_random_seed(2)
    

    【讨论】:

    • 非常感谢。你解决了我的两个问题。实际上我使用cntk并按照你的方式尝试成功:from _cntk_py import set_fixed_random_seed, force_deterministic_algorithms set_fixed_random_seed(1) force_deterministic_algorithms()
    猜你喜欢
    • 2014-01-15
    • 2015-01-31
    • 2019-07-13
    • 2018-05-08
    • 2019-01-29
    • 2015-05-11
    • 1970-01-01
    • 2017-11-27
    • 2017-05-24
    相关资源
    最近更新 更多