如何用keras实现多变量输入神经网络?

2024-05-14

1. 如何用keras实现多变量输入神经网络?

要点如下:
1、神经网络基本结构,应该是输入层-若干个隐含层-输出层。
2、输入层应该有7个输入变量。
3、隐含层层数自定,但每层要超过7个神经元。
4、输出层可以用softmax之类的函数,将隐含层的输出归并成一个。
代码请自行编写。

如何用keras实现多变量输入神经网络?

2. 如何使用keras实现sda 作为pre-train,lr 作为fine tune

denly disappeared. I

3. 如何使用Keras函数式API进行深度学习

序列API使得你能够为大多数问题逐层创建模型。当然它也是有局限性的,那就是它并不能让你创建拥有共享层或具有多个输入或输出的模型。
Keras中的的函数式API是创建模型的另一种方式,它具有更多的灵活性,包括创建更为复杂的模型。

如何使用Keras函数式API进行深度学习

4. 如何评价深度学习框架Keras,Keras-2,TF-Keras

最近一直在用keras,说点个人感受。1、keras根植于python及theano,人气比较旺。2、提供较为上层的框架,搞个深度学习的原型非常方便。3、更新很快,我记得几个月前还没有multi-task的能力,最近再查就提供了graph的对象。4、最重要的,文档很全。这点超过其它类似的基于theano的框架(Lasagne, Opendeep, Blocks)

5. 怎么在keras中定义自己的目标函数

Keras中自定义目标函数(损失函数)的简单方法
标签: 神经网络

分类: 机器学习(2)  

Keras作为一个深度学习库,非常适合新手。在做神经网络时,它自带了许多常用的目标函数,优化方法等等,基本能满足新手学习时的一些需求。具体包含目标函数和优化方法。但它也支持用户自定义目标函数,下边介绍一种最简单的自定义目标函数的方法。

要实现自定义目标函数,自然想到先看下Keras中的目标函数是怎么定义的。查下源码发现在Keras/objectives.py中,Keras定义了一系列的目标函数。

def mean_squared_error(y_true, y_pred):

怎么在keras中定义自己的目标函数

6. 怎么在keras中定义自己的目标函数

Keras作为一个深度学习库,非常适合新手。在做神经网络时,它自带了许多常用的目标函数,优化方法等等,基本能满足新手学习时的一些需求。具体包含目标函数和优化方法。但它也支持用户自定义目标函数,下边介绍一种最简单的自定义目标函数的方法。
要实现自定义目标函数,自然想到先看下Keras中的目标函数是怎么定义的。查下源码发现在Keras/objectives.py中,Keras定义了一系列的目标函数。
def mean_squared_error(y_true, y_pred):
return K.mean(K.square(y_pred - y_true), axis=-1)


def mean_absolute_error(y_true, y_pred):
return K.mean(K.abs(y_pred - y_true), axis=-1)


def mean_absolute_percentage_error(y_true, y_pred):
diff = K.abs((y_true - y_pred) / K.clip(K.abs(y_true), K.epsilon(), np.inf))
return 100. * K.mean(diff, axis=-1)


def mean_squared_logarithmic_error(y_true, y_pred):
first_log = K.log(K.clip(y_pred, K.epsilon(), np.inf) + 1.)
second_log = K.log(K.clip(y_true, K.epsilon(), np.inf) + 1.)
return K.mean(K.square(first_log - second_log), axis=-1)


def squared_hinge(y_true, y_pred):
return K.mean(K.square(K.maximum(1. - y_true * y_pred, 0.)), axis=-1)


def hinge(y_true, y_pred):
return K.mean(K.maximum(1. - y_true * y_pred, 0.), axis=-1)


def categorical_crossentropy(y_true, y_pred):
'''Expects a binary class matrix instead of a vector of scalar classes.
'''
return K.categorical_crossentropy(y_pred, y_true)


def sparse_categorical_crossentropy(y_true, y_pred):
'''expects an array of integer classes.
Note: labels shape must have the same number of dimensions as output shape.
If you get a shape error, add a length-1 dimension to labels.
'''
return K.sparse_categorical_crossentropy(y_pred, y_true)


def binary_crossentropy(y_true, y_pred):
return K.mean(K.binary_crossentropy(y_pred, y_true), axis=-1)


def kullback_leibler_divergence(y_true, y_pred):
y_true = K.clip(y_true, K.epsilon(), 1)
y_pred = K.clip(y_pred, K.epsilon(), 1)
return K.sum(y_true * K.log(y_true / y_pred), axis=-1)


def poisson(y_true, y_pred):
return K.mean(y_pred - y_true * K.log(y_pred + K.epsilon()), axis=-1)


def cosine_proximity(y_true, y_pred):
y_true = K.l2_normalize(y_true, axis=-1)
y_pred = K.l2_normalize(y_pred, axis=-1)
return -K.mean(y_true * y_pred, axis=-1)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960

看到源码后,事情就简单多了,我们只要仿照这源码的定义形式,来定义自己的loss就可以了。例如举个最简单的例子,我们定义一个loss为预测值与真实值的差,则可写为:
def my_koss(y_true,y_pred):
return K.mean((y_pred-y_true),axis = -1)1212

然后,将这段代码放到你的模型中编译,例如
def my_loss(y_true,y_pred):
return K.mean((y_pred-y_true),axis = -1)
model.compile(loss=my_loss,
optimizer='SGD',
metrics=['accuracy'])1234512345

有一点需要注意,Keras作为一个高级封装库,它的底层可以支持theano或者tensorflow,在使用上边代码时,首先要导入这一句
from keras import backend as K11

这样你自定义的loss函数就可以起作用了。

7. 如何评价深度学习框架Keras1与Keras2

拿来学习theano基本用法,很不错库本身的代码,比较简单易读,我作为python菜鸟,也能看懂。目前model有sequential和grapgh两种,前者并不是指recurrent而是说网络是一层层堆的(也包括recurrent).其他的主要概念包括layer,regularizer, optimizer,objective都分离开。layer用于build每层的输出函数,model会用最后一层的输出

如何评价深度学习框架Keras1与Keras2

8. 如何评价深度学习框架Keras

优点:支持python,模型库全,搭模型快,关注度极高,迭代快,可用GPU加速。

缺点:
内部许多类的抽象不合理。
命名略显混乱。
查看中间层输出不够直接。
模型需要compile

这些优缺点很大程度上都是因为现行版本将theano深度耦合,其作者和一些代码贡献者也意识到了这个问题,于是计划下一步将theano解藕出来放到单独的backend模块里,到时也许可以自由切换其他symbolic引擎。总的来说Keras是一个很有前途的库。


更新:
上周作者fork了一个新的backend分支,计划Keras将TensorFlow作为第二个backend,现在已进入开发阶段,将theano和tensorflow的一些函数抽象为统一的API,详见backend分支。
最新文章
热门文章
推荐阅读