【问题标题】:How can I improve my dataset , layers and hyperparameters to achieve my goal?如何改进我的数据集、层和超参数以实现我的目标?
【发布时间】:2019-10-11 18:21:48
【问题描述】:

大家好, 我目前正在研究神经网络,以提供一些关于我正在为我的生物医学工程毕业论文开发的主题的模拟,我目前正面临一些关于我的网络性能不佳的问题。这是我第一次使用 python , keras, tensorflow 和一般的机器学习。

数据:

基本上,我想预测一个向量,该向量包含由 N 帧组成的圆形网格中的电导率值。我之前生成了 10000 个网格,每个网格在随机位置都有一个圆形伪影。该伪影涉及电导率的变化。背景电导率设置为 1,伪影中心为 100,伪影边界为 50。我已经模拟了在我的网格边界处注入电流,读取每个网格的 208 个电压,这些电压是从放置在边界处的 16 个电极获得的。我的目标是开发一个神经网络,给定(208)个电压阵列,可以预测电导率矢量,我将在 Matlab 中详细说明以重建预测图像。 所以我有: 208 个电压的 10k 阵列,范围 [10^(-2),10^(-4)] 10k 个 N 电导率阵列,范围从 1 到 100。 我所做的唯一预处理是电压在 [1,-1] 之间的归一化,电导率限制为 [1-50-100],然后是归一化 [1,-1]。

这是我实际运行以进行测试的代码。

inp = pd.read_csv (r' ........input.csv',header = None) 
out = pd.read_csv (r'........output.csv',header = None) 

X, Y = inp.values, out.values

print(X.shape)
print(Y.shape)

x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.30, 
random_state=0)
x_validate, x_test, y_validate, y_test = train_test_split(x_test, y_test, 
test_size=0.5, random_state=0)

model = Sequential()
model.add(Dense(416, input_dim=208, activation='relu'))
model.add(Dense(585, activation='tanh'))

sgd = optimizers.SGD(lr=1)
model.compile(loss=losses.mean_squared_error, optimizer=sgd, metrics= 
['accuracy', 'acc', 'mse'])
model.fit(x_train, y_train, epochs=1000, batch_size=128, validation_data= 
(x_validate, y_validate))

我已经尝试了对两个密集层的各种激活:relu、tanh、linear,以及所有可能的组合。各种学习率和数据预处理(现在我被我上面描述的那个卡住了)。顺便说一句,我得到的最佳精度是 0.1 ,mse 为 0.02/0.03。我应该从哪里着手优化网络结构以取得更好的效果?我确信我在上游的某些事情上失败了,如果有人能给我一些提示,我将非常感激,一些食物虽然这样我就可以朝着正确的方向前进。 我很抱歉写作中的错误,但英语不是我的主要语言。

编辑:

>>> print(model.summary())
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
dense_1 (Dense)              (None, 416)               86944
_________________________________________________________________
dense_2 (Dense)              (None, 585)               243945
=================================================================
Total params: 330,889
Trainable params: 330,889
Non-trainable params: 0
_________________________________________________________________
None
>>> print(model.evaluate(x_test, y_test, verbose=0))
[0.005556682635098696, 0.07133333336313566, 0.07133333336313566, 0.005556682635098696]

【问题讨论】:

  • 您能解释一下您的数据是什么样的吗?或print( X.shape) 或和print( Y.shape)
  • 当然。我的数据存储在 2 个 csv 文件的 2 个矩阵中。输入:10000x208,输出 10000x585。每一行都是不同的情况。
  • 你能print(model.summary())print(model.evaluate(X_test, Y_test, verbose=0))吗?
  • 我编辑了第一篇文章
  • 您可以通过更改学习率对其进行微调,但只要您的损失图令人满意并且您没有过拟合/欠拟合,另一方面您的 MSE 足够低,您可以通过以下方式优化结果使用回调技术(例如提前停止)来改善您的训练过程。你试过其他optimizer=adam吗?

标签: python tensorflow keras keras-layer hyperparameters


【解决方案1】:

在机器学习中,超参数优化或调优是为学习算法选择一组最优超参数的问题,这是非常传统的,所有数据科学家在调优模型时都会面临这个问题

也就是说,有许多适用于各种场景的出色工具可用于在此过程中为您提供帮助:

对于 tensorflow,我推荐阅读:https://www.tensorflow.org/tensorboard/r2/hyperparameter_tuning_with_hparams

对于 keras:https://towardsdatascience.com/hyperparameter-optimization-with-keras-b82e6364ca53

当然,还有更多,使用正确的超参数调整/优化术语搜索,您可以在线找到大量资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多