K.one_hot & K.sum

one-hot

one_hot(indices, nb_classes)

输入为n维的整数张量,形如(batch_size, dim1, dim2, ... dim(n-1)),输出为(n+1)维的one-hot编码,形如(batch_size, dim1, dim2, ... dim(n-1), nb_classes)


sum

sum(x, axis=None, keepdims=False)

在给定轴上计算张量中元素之和

K.sum 的源码

def sum(x, axis=None, keepdims=False):
    """Sum of the values in a tensor, alongside the specified axis.

    # Arguments
        x: A tensor or variable.
        axis: An integer or list of integers in [-rank(x), rank(x)),
            the axes to sum over. If `None` (default), sums over all
            dimensions.
        keepdims: A boolean, whether to keep the dimensions or not.
            If `keepdims` is `False`, the rank of the tensor is reduced
            by 1. If `keepdims` is `True`,
            the reduced dimension is retained with length 1.

    # Returns
        A tensor with sum of `x`.
    """
    return tf.reduce_sum(x, axis, keepdims)

返回的是: tf.reduce_sum(x, axis, keepdims)


接下来给出  tf.reduce_sum(x, axis, keepdims) 的实例,了解sum 的用法

例子:

import tensorflow as tf                                                   
                                                                          
x = tf.constant([[1, 1, 1], [1, 1, 1]])                                   
y1=tf.reduce_sum(x)  # 6                                                  
y2=tf.reduce_sum(x, 0)  # [2, 2, 2]                                       
y3=tf.reduce_sum(x, 1)  # [3, 3]                                          
y4=tf.reduce_sum(x, 1, keepdims=True)  # [[3], [3]]                       
y5=tf.reduce_sum(x, [0, 1])  # 6                                          
                                                                          
print("y1 value:",tf.Session().run(y1)," --- y1 shape:",y1.shape)         
print("y2 value:",tf.Session().run(y2)," --- y2 shape:",y2.shape)         
print("y3 value:",tf.Session().run(y3)," --- y3 shape:",y3.shape)         
print("y4 value:",tf.Session().run(y4)," --- y4 shape:",y4.shape)         
print("y5 value:",tf.Session().run(y5)," --- y5 shape:",y5.shape)         

 

 

生成torch代码:class ConcreteAutoencoderFeatureSelector(): def __init__(self, K, output_function, num_epochs=300, batch_size=None, learning_rate=0.001, start_temp=10.0, min_temp=0.1, tryout_limit=1): self.K = K self.output_function = output_function self.num_epochs = num_epochs self.batch_size = batch_size self.learning_rate = learning_rate self.start_temp = start_temp self.min_temp = min_temp self.tryout_limit = tryout_limit def fit(self, X, Y=None, val_X=None, val_Y=None): if Y is None: Y = X assert len(X) == len(Y) validation_data = None if val_X is not None and val_Y is not None: assert len(val_X) == len(val_Y) validation_data = (val_X, val_Y) if self.batch_size is None: self.batch_size = max(len(X) // 256, 16) num_epochs = self.num_epochs steps_per_epoch = (len(X) + self.batch_size - 1) // self.batch_size for i in range(self.tryout_limit): K.set_learning_phase(1) inputs = Input(shape=X.shape[1:]) alpha = math.exp(math.log(self.min_temp / self.start_temp) / (num_epochs * steps_per_epoch)) self.concrete_select = ConcreteSelect(self.K, self.start_temp, self.min_temp, alpha, name='concrete_select') selected_features = self.concrete_select(inputs) outputs = self.output_function(selected_features) self.model = Model(inputs, outputs) self.model.compile(Adam(self.learning_rate), loss='mean_squared_error') print(self.model.summary()) stopper_callback = StopperCallback() hist = self.model.fit(X, Y, self.batch_size, num_epochs, verbose=1, callbacks=[stopper_callback], validation_data=validation_data) # , validation_freq = 10) if K.get_value(K.mean( K.max(K.softmax(self.concrete_select.logits, axis=-1)))) >= stopper_callback.mean_max_target: break num_epochs *= 2 self.probabilities = K.get_value(K.softmax(self.model.get_layer('concrete_select').logits)) self.indices = K.get_value(K.argmax(self.model.get_layer('concrete_select').logits)) return self def get_indices(self): return K.get_value(K.argmax(self.model.get_layer('concrete_select').logits)) def get_mask(self): return K.get_value(K.sum(K.one_hot(K.argmax(self.model.get_layer('concrete_select').logits), self.model.get_layer('concrete_select').logits.shape[1]), axis=0)) def transform(self, X): return X[self.get_indices()] def fit_transform(self, X, y): self.fit(X, y) return self.transform(X) def get_support(self, indices=False): return self.get_indices() if indices else self.get_mask() def get_params(self): return self.model
04-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值