如何改善数据集,层和超参数以实现目标?

时间:2019-05-25 12:00:11

标签: python tensorflow keras keras-layer hyperparameters

大家好, 我目前正在使用神经网络来提供与我正在为生物医学工程毕业论文开发的主题进行一些模拟,并且目前正面临一些有关网络性能不佳的问题。这是我第一次使用python ,keras,张量流和一般的机器学习。

数据:

基本上,我想预测一个矢量,其中包含N帧组成的圆形网格中的电导率值。我以前已经生成了10000个网格,每个网格在随机位置上都有一个圆形伪像。该伪像涉及电导率的变化。背景电导率设置为1,在伪影的中心为100,在伪影的边界为〜50。我模拟了在网格边界处注入的电流,为每个网格读取从放置在边界处的16个电极获得的208个电压。我的目标是开发一种神经网络,该神经网络在给定(208)电压阵列的情况下,可以预测电导率矢量,我将在Matlab中对其进行详细介绍,以重建预测的图像。 所以我有: 208个电压的10k阵列,范围为[10 ^(-2),10 ^(-4)] 1万个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,毫秒为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]

1 个答案:

答案 0 :(得分:0)

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

>

也就是说,针对各种情况有很多很棒的工具可以用来帮助您完成此过程:

对于张量流,我建议阅读:https://www.tensorflow.org/tensorboard/r2/hyperparameter_tuning_with_hparams

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

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