为什么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"); ?>
答案 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] array([[ 0., 0., 1.],
[ 0., 1., 0.],
[ 0., 1., 0.]])
所以如果你尝试类似[2,-4,-4]的东西,它会给你一个错误,因为没有索引-4,因为分类形状是[3,3]。