RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 868194
Accepted
alex-rudenkiy
alex-rudenkiy
Asked:2020-08-13 23:33:31 +0000 UTC2020-08-13 23:33:31 +0000 UTC 2020-08-13 23:33:31 +0000 UTC

将类向量转换为二进制矩阵的问题 (np_utils.to_categorical)

  • 772

所以我决定做一个神经网络,理论上应该学习逻辑运算 OR(或),但现在我在准备训练示例的答案时遇到了问题

In [1]: from __future__ import print_function
    ...: import numpy as np
    ...: from keras.datasets import mnist
    ...: from keras.models import Sequential
    ...: from keras.layers.core import Dense, Activation
    ...: from keras.optimizers import SGD
    ...: from keras.utils import np_utils
    ...: np.random.seed(1671) # для воспроизводимости результатов
    ...: 
    ...: NB_EPOCH = 20
    ...: BATCH_SIZE = 3
    ...: VERBOSE = 1
    ...: NB_CLASSES = 1 # количество результатов
    ...: OPTIMIZER = SGD() # СГС-оптимизатор
    ...: N_HIDDEN = 64

In [2]: X_in = [[1,0],[1,1],[0,0],[0,1],[1,1],[0,0],[1,1]]
    ...: x_otvet = [1,1,0,1,1,0,1]
    ...: X_in = np.asarray(X_in, dtype=np.float32)
    ...: x_otvet = np.asarray(x_otvet, dtype=np.float32)

In [3]: x_otvet = np_utils.to_categorical(x_otvet, NB_CLASSES)
Traceback (most recent call last):

  File "<ipython-input-12-a268ac2ea14c>", line 1, in <module>
    x_otvet = np_utils.to_categorical(x_otvet, NB_CLASSES)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\utils\np_utils.py", line 31, in to_categorical
    categorical[np.arange(n), y] = 1

IndexError: index 1 is out of bounds for axis 1 with size 1

如果省略np_utils.to_categorical,则会得到以下信息:

In [13]: model = Sequential()
    ...: model.add(Dense(NB_CLASSES, input_shape=(2,)))
    ...: model.add(Activation('softmax'))
    ...: model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_2 (Dense)              (None, 1)                 3         
_________________________________________________________________
activation_2 (Activation)    (None, 1)                 0         
=================================================================
Total params: 3
Trainable params: 3
Non-trainable params: 0
_________________________________________________________________

In [14]: model.compile(loss='categorical_crossentropy',
    ...: optimizer=OPTIMIZER,
    ...: metrics=['accuracy'])

In [15]: history = model.fit(X_in, x_otvet,
    ...: batch_size=BATCH_SIZE, epochs=NB_EPOCH,
    ...: verbose=VERBOSE)
Traceback (most recent call last):

  File "<ipython-input-15-c47f30350ab5>", line 3, in <module>
    verbose=VERBOSE)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\models.py", line 1002, in fit
    validation_steps=validation_steps)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\engine\training.py", line 1630, in fit
    batch_size=batch_size)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\engine\training.py", line 1493, in _standardize_user_data
    self._feed_output_shapes)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\engine\training.py", line 256, in _check_loss_and_target_compatibility
    ' while using as loss `categorical_crossentropy`. '

ValueError: You are passing a target array of shape (7, 1) while using as loss `categorical_crossentropy`. `categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes). If your targets are integer classes, you can convert them to the expected format via:
```
from keras.utils import to_categorical
y_binary = to_categorical(y_int)
```
Alternatively, you can use the loss function `sparse_categorical_crossentropy` instead, which does expect integer targets.

PS如果这是一个愚蠢的问题,我很抱歉。

更新:

好吧,总的来说,我有点纠正我的错误,但现在的问题是我无法理解为什么我的 NS 不喜欢输入数据的格式,数组中有两个元素,但他写了一个?(

In [16]: NB_CLASSES = 2

In [18]: x_otvet = np_utils.to_categorical(x_otvet, NB_CLASSES)

In [20]: model = Sequential()
    ...: model.add(Dense(NB_CLASSES, input_shape=(2,)))
    ...: model.add(Activation('softmax'))
    ...: model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_3 (Dense)              (None, 2)                 6         
_________________________________________________________________
activation_3 (Activation)    (None, 2)                 0         
=================================================================
Total params: 6
Trainable params: 6
Non-trainable params: 0
_________________________________________________________________

In [22]: model.compile(loss='categorical_crossentropy', optimizer=OPTIMIZER, metrics=['accuracy'])

In [23]: history = model.fit(X_in, x_otvet, batch_size=BATCH_SIZE, epochs=NB_EPOCH, verbose=VERBOSE)

Epoch 1/20
7/7 [==============================] - 1s 75ms/step - loss: 0.4861 - acc: 0.8571
Epoch 2/20
7/7 [==============================] - 0s 643us/step - loss: 0.4833 - acc: 1.0000
Epoch 3/20
7/7 [==============================] - 0s 572us/step - loss: 0.4784 - acc: 0.7143
Epoch 4/20
7/7 [==============================] - 0s 500us/step - loss: 0.4751 - acc: 0.7143
Epoch 5/20
7/7 [==============================] - 0s 500us/step - loss: 0.4712 - acc: 0.7143
Epoch 6/20
7/7 [==============================] - 0s 572us/step - loss: 0.4680 - acc: 0.7143
Epoch 7/20
7/7 [==============================] - 0s 643us/step - loss: 0.4637 - acc: 0.7143
Epoch 8/20
7/7 [==============================] - 0s 500us/step - loss: 0.4603 - acc: 0.7143
Epoch 9/20
7/7 [==============================] - 0s 500us/step - loss: 0.4556 - acc: 0.7143
Epoch 10/20
7/7 [==============================] - 0s 500us/step - loss: 0.4525 - acc: 0.7143
Epoch 11/20
7/7 [==============================] - 0s 500us/step - loss: 0.4492 - acc: 0.7143
Epoch 12/20
7/7 [==============================] - 0s 500us/step - loss: 0.4457 - acc: 0.7143
Epoch 13/20
7/7 [==============================] - 0s 429us/step - loss: 0.4416 - acc: 0.7143
Epoch 14/20
7/7 [==============================] - 0s 643us/step - loss: 0.4390 - acc: 0.7143
Epoch 15/20
7/7 [==============================] - 0s 500us/step - loss: 0.4367 - acc: 0.7143
Epoch 16/20
7/7 [==============================] - 0s 500us/step - loss: 0.4342 - acc: 0.7143
Epoch 17/20
7/7 [==============================] - 0s 429us/step - loss: 0.4320 - acc: 0.7143
Epoch 18/20
7/7 [==============================] - 0s 500us/step - loss: 0.4290 - acc: 0.7143
Epoch 19/20
7/7 [==============================] - 0s 500us/step - loss: 0.4269 - acc: 0.7143
Epoch 20/20
7/7 [==============================] - 0s 500us/step - loss: 0.4242 - acc: 0.7143

In [25]: answer = model.predict([1,0])
Traceback (most recent call last):

  File "<ipython-input-25-9f7569b0b419>", line 1, in <module>
    answer = model.predict([1,0])

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\models.py", line 1064, in predict
    steps=steps)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\engine\training.py", line 1817, in predict
    check_batch_axis=False)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\engine\training.py", line 123, in _standardize_input_data
    str(data_shape))

ValueError: Error when checking : expected dense_3_input to have shape (2,) but got array with shape (1,)

In [26]: answer = model.predict([1,0])
Traceback (most recent call last):

  File "<ipython-input-26-9f7569b0b419>", line 1, in <module>
    answer = model.predict([1,0])

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\models.py", line 1064, in predict
    steps=steps)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\engine\training.py", line 1817, in predict
    check_batch_axis=False)

  File "D:\Users\Alex\Anaconda3\lib\site-packages\keras\engine\training.py", line 123, in _standardize_input_data
    str(data_shape))

ValueError: Error when checking : expected dense_3_input to have shape (2,) but got array with shape (1,)
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    MaxU - stop genocide of UA
    2020-08-14T01:27:04Z2020-08-14T01:27:04Z

    您有两个类(0和1),而不仅仅是一个 - 这导致了错误:

    IndexError:索引 1 超出轴 1 的范围,大小为 1

    NB_CLASSES可以动态计算:

    In [4]: NB_CLASSES = len(set(x_otvet))
    
    In [5]: NB_CLASSES
    Out[5]: 2
    
    In [6]: np_utils.to_categorical(x_otvet, NB_CLASSES)
    Out[6]:
    array([[0., 1.],
           [0., 1.],
           [1., 0.],
           [0., 1.],
           [0., 1.],
           [1., 0.],
           [0., 1.]], dtype=float32)
    

    如果 Numpy 输入是一个向量:

    In [10]: y = np.array(x_otvet)
    
    In [11]: NB_CLASSES = len(np.unique(y))
    
    In [12]: NB_CLASSES
    Out[12]: 2
    

    更新:您的模型需要一个包含两列作为输入的 2D Numpy 矩阵:

    In [274]: model.predict(np.array([[1,0]]))
    Out[274]: array([[0.46766034, 0.53233963]], dtype=float32)
    
    • 1

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5