- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
下面是多类分类任务的简单例子虹膜数据。
import seaborn as sns
import numpy as np
from sklearn.cross_validation import train_test_split
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
from keras.regularizers import l2
from keras.utils import np_utils
#np.random.seed(1335)
# Prepare data
iris = sns.load_dataset("iris")
iris.head()
X = iris.values[:, 0:4]
y = iris.values[:, 4]
# Make test and train set
train_X, test_X, train_y, test_y = train_test_split(X, y, train_size=0.5, random_state=0)
################################
# Evaluate Keras Neural Network
################################
# Make ONE-HOT
def one_hot_encode_object_array(arr):
'''One hot encode a numpy array of objects (e.g. strings)'''
uniques, ids = np.unique(arr, return_inverse=True)
return np_utils.to_categorical(ids, len(uniques))
train_y_ohe = one_hot_encode_object_array(train_y)
test_y_ohe = one_hot_encode_object_array(test_y)
model = Sequential()
model.add(Dense(16, input_shape=(4,),
activation="tanh",
W_regularizer=l2(0.001)))
model.add(Dropout(0.5))
model.add(Dense(3, activation='sigmoid'))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'], optimizer='adam')
# Actual modelling
# If you increase the epoch the accuracy will increase until it drop at
# certain point. Epoch 50 accuracy 0.99, and after that drop to 0.977, with
# epoch 70
hist = model.fit(train_X, train_y_ohe, verbose=0, nb_epoch=100, batch_size=1)
score, accuracy = model.evaluate(test_X, test_y_ohe, batch_size=16, verbose=0)
print("Test fraction correct (NN-Score) = {:.2f}".format(score))
print("Test fraction correct (NN-Accuracy) = {:.2f}".format(accuracy))
我的问题是人们通常如何决定层的大小?例如基于上面的代码我们有:
model.add(Dense(16, input_shape=(4,),
activation="tanh",
W_regularizer=l2(0.001)))
model.add(Dense(3, activation='sigmoid'))
Dense
的第一个参数是 16,第二个是 3。
最佳答案
基本上这只是反复试验。这些称为超参数,应该在验证集上进行调整(从原始数据拆分为训练/验证/测试)。
调优只是意味着尝试不同的参数组合,并根据问题将损失值最低或准确性更高的参数保留在验证集上。
有两种基本方法:
网格搜索:对于每个参数,确定一个范围并步入该范围,例如 8 到 64 个神经元,以 2 的幂(8、16、32、64)为单位,然后尝试参数的每个组合。这显然需要指数级数量的模型进行训练和测试,并且需要花费大量时间。
随机搜索:做同样的事情,但只是为每个参数定义一个范围,然后尝试从每个范围内的均匀分布中抽取一组随机参数。您可以尝试尽可能多的参数集,可以尝试多长时间。这只是一个知情的随机猜测。
不幸的是,没有其他方法可以调整这些参数。关于具有不同数量神经元的层,这可能来自调整过程,或者您也可以将其视为降维,例如前一层的压缩版本。
关于python - 如何确定 Keras 的 Dense 方法中层的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36950394/
为什么 get_weights() 返回的权重值与实际权重不同?我认为初始化后这两种方法应该显示相同的权重。 import tensorflow as tf import os sess = tf.S
我正在尝试使用 Keras。 当我尝试以下代码时: from keras.layers import Dense 我收到以下错误: Traceback (most recent call last):
我正在构建一个模型,该模型使用循环层 (GRU) 将一个字符串转换为另一个字符串。我尝试过使用 Dense 层和 TimeDistributed(Dense) 层作为最后一层,但我不明白使用 retu
this question of mine 的答案让我期望 Eigen 中的产品(对于具有 1/4 非消失条目的矩阵)稠密矩阵 * 稠密 vector 应该跑赢稀疏矩阵*密集 vector 。 我不仅
我正在尝试为上下文强盗问题 (https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part
from keras import layers from keras import models model = models.Sequential() model.add(layers.Conv2
我目前正在学习深度学习和Keras。当我执行此代码时,我收到奇怪的错误:“TypeError:无法使用非浮点dtype构建Dense层”,我无法找出问题所在。我想念什么?如何解决这个奇怪的错误? 错误
我正在处理 pandas 数据框并且有一个像这样的框架: Year Value 2012 10 2013 20 2013 25 2014 30 我想做一个等同于 DENSE_RANK ()
我在 Tensorflow 中有一个网络,我想定义一个函数,通过 tf.layers.dense 层(显然是同一层)传递它的输入。我看到了 reuse 参数,但为了正确使用它,我似乎需要保留一个全局变
在转换自定义 tensorflow 图时,我看到与将密集层从 pb 格式转换为 DLC 格式有关的错误: 2017-11-02 13:43:35,260 - 305 - WARNING - WARNI
我需要在稀疏矩阵上使用线性回归。我的结果一直很差,所以我决定在一个稀疏表示的非稀疏矩阵上测试它。数据取自https://www.analyticsvidhya.com/blog/2021/05/mul
这个问题已经有答案了: How to pivot Spark DataFrame? (10 个回答) 已关闭 6 年前。 我有一个数据框,如下所示: item_id week_id sale am
我正在尝试为序数回归创建一个模型,正如这个 paper 所解释的那样.它的主要部分是在最后一层共享权重,而不是为了获得秩单调性的偏差(基本上确保 P[Y>N] 必须始终大于 P[Y>N-1] 对于任何
我有一个简单的序列模型,使用 TimeDistributed(Dense...) 作为 LSTM 层之后的最后一层。我正在以 20 个时间步长的顺序训练时间序列数据。损失函数是Mean Absolut
我有点误解如何为我的数据创建一个简单的序列。 数据具有以下维度: X_train.shape (2369, 12) y_train.shape (2369,) X_test.shape (592, 1
这个问题在这里已经有了答案: CSS-only masonry layout (4 个答案) 关闭 4 年前。 您可以这样想,因为我们在 Facebook 上上传了多张图片(可能尺寸不同),它们在新
我正在制作一个解决回归问题的 DNN。 首先我加载了一个预训练的 VGG16 网络,然后我制作了几个完全连接的隐藏层。最后一层有一个输出标量的节点。 我认为输出的形状应该类似于 [batch_size
在 tensorflow layers.dense(inputs, units, activation) 中实现了一个具有任意激活函数的多层感知器层。 输出=激活(matmul(输入,权重)+偏差)
如果我只使用这样的单层: layer = tf.layers.dense(tf_x, 1, tf.nn.relu) 这只是具有单个节点的单层吗? 或者它实际上是一组只有一个节点的层(输入层、隐藏层、输
池化层定义在tensorflow/python/layers/pooling.py. 有最大值池化和均值池化。 1、tf.layers.max_pooling2d
我是一名优秀的程序员,十分优秀!