Keras np_utils.to_categorical表现不同

时间:2017-07-20 03:56:40

标签: python keras

为什么Keras to_categorical在[1,-1]和[2,-2]上表现不同?

<?php include "inc/header.php"; ?>
   spl_autoload_register(function ($class){

    include"classes/".$class.".php";
});

$user = new student();

?>


<section class="mainleft">
<form action="" method="post">
 <table>
    <tr>
        <td>Name: </td>
        <td><input type="text" name="name" required="1"/></td>    
    </tr>

    <tr>
       <td>Department: </td>
        <td><input type="text" name="name" required="1"/></td>
    </tr>

    <tr>
      <td>Age: </td>
        <td><input type="text" name="name" required="1"/></td>
    </tr>
    <tr>
      <td></td>
        <td>
        <input type="submit" name="submit" value="Submit"/>
        <input type="reset" value="Clear"/>
        </td>
    </tr>
  </table>
</form>
</section>



<section class="mainright">
  <table class="tblone">
    <tr>
        <th>No</th>
        <th>Name</th>
        <th>Department</th>
        <th>Age</th>
        <th>Action</th>
    </tr>

      <?php

      $i=0;
      foreach($user->readAll() as $key => $value){
          $i++;



   ?>



    <tr>
        <td><?php echo $i;?></td>
        <td><?php echo $value['name']; ?></td>
        <td><?php echo $value['dept']; ?></td>
        <td><?php echo $value['age']; ?></td>
        <td>
        <a href="">Edit</a> ||
        <a href="">Delete</a>
        </td>
    </tr>
<?php } ?>

  </table>
</section>

<?php include("inc/footer.php"); ?>

2 个答案:

答案 0 :(得分:4)

to_categorical不会采用负值,如果您的数据集包含负值,则可以将y - y.min()传递给to_categorical,以便它可以正常运行:

>>> y = numpy.array([2, -2, -2])
>>> to_categorical(y)
array([[ 0.,  0.,  1.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.]])
>>> to_categorical(y - y.min())
array([[ 0.,  0.,  0.,  0.,  1.],
       [ 1.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.]])

答案 1 :(得分:2)

y = np.array(y, dtype='int').ravel()
if not num_classes:
    num_classes = np.max(y) + 1
n = y.shape[0]
categorical = np.zeros((n, num_classes))
categorical[np.arange(n), y] = 1

以上是to_categorical的实现。

所以在[1,-1,-1]情况下发生的事情是:
num_classes = 2 [np.max()+ 1]
分类形状变为[3,2]
所以当-1来时它会读取最后一个索引并使其成为1.而对于1它也会读取索引1(索引从0开始) 这就是为什么最终输出成为

的原因
array([[ 0.,  1.],
       [ 0.,  1.],
       [ 0.,  1.]])
num_classes = 3 [np.max()+ 1]
分类形状变为[3,3]
因此,当-2到来时,它读取第二个最后一个索引并使其成为1.而对于2,它读取索引2(索引从0开始) 这就是为什么最终输出成为

的原因
array([[ 0.,  0.,  1.],
       [ 0.,  1.,  0.],
       [ 0.,  1.,  0.]])

所以如果你尝试类似[2,-4,-4]的东西,它会给你一个错误,因为没有索引-4,因为分类形状是[3,3]。