标签: neural-network

Keras - predict_proba 加起来不等于 1?

我是 Keras 的新手,这是我的 nn:

model = Sequential()
model.add(Dense(12, activation="relu", input_dim=12, kernel_initializer="normal"))
model.add(Dense(3, activation="sigmoid", kernel_initializer="normal"))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

我有 3 个输出:高、中或低。

当我尝试使用该predict函数时,我得到了正确的类:

array(['medium', 'low', 'medium', ..., 'low', 'medium', 'low'], dtype=object)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试predict_proba函数时,我会得到加起来不等于 1 的概率?

array([[  4.93983855e-04,   2.28181913e-01,   9.70774710e-01],
       [  3.14530940e-03,   9.60477769e-01,   3.79752717e-04],
       [  1.40661141e-03,   5.70683666e-02,   9.96348858e-01],
       ..., 
       [  1.29012510e-01,   7.08254218e-01,   2.44960701e-03],
       [  1.69786233e-02,   4.71719205e-02,   9.90665674e-01],
       [  1.28657368e-04,   9.89430904e-01,   9.04915680e-04]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

第一行是4.93983855e-04 + 2.28181913e-01 + 9.70774710e-01,总和是1.199450606855,大于1。

我认为第一行意味着:第一列(4.93983855e-04)的概率是中等?

python neural-network keras

0
推荐指数
1
解决办法
2271
查看次数

“前馈网络”和“全连接网络”有什么区别?

有时我对这两个术语感到困惑。所以,我要求澄清这一点。有人说“前馈网络”是典型的神经网络。如果那样的话,“前馈网络”意味着更大的范围,包括“全连接网络”?如果那样的话,RNN 或 CNN 是否也包含在“前馈网络”中?我猜不是..我希望有一个明确的描述。谢谢你。

neural-network deep-learning tensorflow

0
推荐指数
1
解决办法
5456
查看次数

从 Keras 层获取权重

我正在尝试从以下Dense层获取权重:

x = Dense(1024)(Flatten()(previous_layer))
Run Code Online (Sandbox Code Playgroud)

如果我尝试执行以下操作:

x = Dense(1024)
weights = x.get_weights()
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我的理解是这些权重将是无用的,因为我们没有向该层提供任何输入。

但是,如果我尝试执行以下操作:

x = Dense(1024)(Flatten()(previous_layer))
weights = x.get_weights()
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为x现在是一个Tensor对象并且没有get_weights方法:

'Tensor' object has no attribute 'get_weights'

我究竟做错了什么?

machine-learning neural-network deep-learning keras tensorflow

0
推荐指数
1
解决办法
5747
查看次数

train() 中的 ROC 指标,插入符号包

df在训练和测试dataframes分裂。训练数据帧分为训练数据帧和测试数据帧。因变量Y是二进制(因子),值为 0 和 1。我试图用这个代码(神经网络,插入符号包)预测概率:

library(caret)

model_nn <- train(
  Y ~ ., training,
  method = "nnet",
  metric="ROC",
  trControl = trainControl(
    method = "cv", number = 10,
    verboseIter = TRUE,
    classProbs=TRUE
  )
)

model_nn_v2 <- model_nn
nnprediction <- predict(model_nn, testing, type="prob")
cmnn <-confusionMatrix(nnprediction,testing$Y)
print(cmnn) # The confusion matrix is to assess/compare the model
Run Code Online (Sandbox Code Playgroud)

但是,它给了我这个错误:

    Error: At least one of the class levels is not a valid R variable name; 
This will cause errors when class probabilities are generated …
Run Code Online (Sandbox Code Playgroud)

r machine-learning neural-network roc r-caret

0
推荐指数
1
解决办法
3341
查看次数

如何标准化不同激活函数的训练数据?

我正在训练完全连接的神经网络来对 MNIST 数据集进行分类。输入数据是像素值为 的方形黑白图像[0, 255]

我读过使用sigmoid()激活器需要将输入归一化为[0, 1](sigmoid 范围)。

如何标准化tanh()激活器的输入数据?我是否需要重新调整它以在[-1, 1](tanh 范围内)或它仍然可以在[0, 1].

哪种方法更好,为什么?一般指导是什么?

machine-learning neural-network mnist

0
推荐指数
1
解决办法
2033
查看次数

训练一段时间后DQN平均奖励减少

我正在尝试实现一个 DQN 算法,该算法通过在每个时间步提供游戏的 RAM 状态作为输入来训练代理从 Open AI Gym Atari 环境玩 Breakout。我使用了 jaara https://github.com/jaara/AI-blog/blob/master/Seaquest-DDQN-PER.py#L102的 AI-Blog 存储库中的代码并对其进行了一些更改。这是代码:

import random, numpy, math, gym
from SumTree import SumTree
import tensorflow as tf
import numpy as np
from tensorflow.keras import backend as K
import scipy.misc

# -----------------HYPER PARAMETERS--------------
# IMAGE_WIDTH = 84
# IMAGE_HEIGHT = 84
RAM_SIZE = 128
IMAGE_STACK = 2

HUBER_LOSS_DELTA = 2.0
LEARNING_RATE = 0.00025

MEMORY_CAPACITY = 200000

BATCH_SIZE = 32

GAMMA = 0.99

MAX_EPSILON = 1
MIN_EPSILON = 0.1

EXPLORATION_STOP …
Run Code Online (Sandbox Code Playgroud)

python machine-learning reinforcement-learning neural-network deep-learning

0
推荐指数
1
解决办法
3544
查看次数

神经网络收敛过快,预测空白结果

我正在使用 UNet 模型来训练分割算法,其中包含大约 1,000 个灰度医学图像和 1,000 个相应的掩码,其中医学图像中感兴趣的部分是白色像素,背景是黑色。

我使用骰子损失和类似的骰子分数作为准确度指标,以说明我的白色像素的数量通常少于黑色背景像素的数量。但是我在训练的时候还是有一些问题

1)损失收敛过快。例如,如果我的 SGD 优化器的学习率为 0.01,则在大约 2 个 epoch 时,损失(训练和验证)将下降到 0.00009,并且准确度上升并按比例稳定在 100%。在一个看不见的集合上进行测试会给出空白图像。

假设 - 过度拟合:我假设这是由于过度拟合,所以我通过刚性变换尽可能地增加了数据集 - 翻转和旋转,但仍然没有帮助。此外,如果我针对用于训练它的相同数据测试模型,它仍然可以预测空白图像。那么这是否意味着它不是过度拟合的情况?

2)模型看起来不像是训练。我能够在将所有测试数据减少到黑色之前检查模型,但即便如此,结果看起来就像原始版本的模糊版本,而没有分割我的训练蒙版突出显示的特征

3) loss vs epochs 和accuracy vs epochs 输出图表非常平滑:它们没有呈现我在进行语义分割时期望看到的振荡行为。根据这个相关的帖子,当只有一个类时,通常会出现平滑的图表。然而,我假设我的模型会看到训练掩码(白色像素与黑色像素)并将其视为两类问题。这个假设我错了吗?

4)根据这篇文章,骰子适用于不平衡的训练集。我还尝试按照他们的建议获得精度/召回率/F1 结果,但无法做到,并假设这可能与我的第三个问题有关,模型将我的分割任务视为单类问题。

TLDR:如何修复我得到的黑色输出结果?您能否帮我澄清一下,我的学习模型是否实际上将每个蒙版中的白色和黑色像素视为两个单独的类,如果不是,它实际上在做什么?

neural-network image-segmentation keras

0
推荐指数
1
解决办法
3167
查看次数

如何在 Keras 中绘制 MLP 模型的训练损失和准确度曲线?

我使用Keras模拟神经网络,我试图用一个图来评估它accval_acc。我在以下代码行中有 3 个错误:

  1. print(history.keys())错误是function' object has not attribute 'keys'
  2. y_pred = classifier.predict(X_test)错误是name 'classifier' is not defined
  3. plt.plot(history.history['acc'])错误是 'History' object is not subscriptable

我也在尝试绘制 ROC 曲线,我该怎么做?

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import keras
from keras.models import Sequential
from keras.layers import Dense
from sklearn import cross_validation
from matplotlib import pyplot
from keras.utils import plot_model

dataset = pd.read_csv('Data_BP.csv')
X = dataset.iloc[:, 0:11].values
y = …
Run Code Online (Sandbox Code Playgroud)

neural-network roc scikit-learn keras tensorflow

0
推荐指数
1
解决办法
1万
查看次数

了解 3D 卷积以及何时使用它?

我是卷积神经网络的新手,我正在学习 3D 卷积。我能理解的是,2D 卷积为我们提供了 XY 维度中低级特征之间的关系,而 3D 卷积有助于检测所有 3 维中的低级特征和它们之间的关系。

考虑使用 2D 卷积层来识别手写数字的 CNN。如果一个数字,比如 5,用不同的颜色书写:

在此处输入图片说明

严格的 2D CNN 是否会表现不佳(因为它们在 z 维度上属于不同的通道)?

另外,是否有使用 3D 卷积的实用的知名神经网络?

convolution neural-network conv-neural-network

0
推荐指数
1
解决办法
730
查看次数

ValueError : 层 lstm 的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。收到的完整形状:[无,18]

我是 Keras 的新手,我正在尝试构建一个供个人使用/未来学习的模型。我刚开始使用 python,我想出了这段代码(在视频和教程的帮助下)。我有 16324 个实例的数据,每个实例由 18 个特征和 1 个因变量组成。

import pandas as pd
import os
import time
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, LSTM, BatchNormalization
from tensorflow.keras.callbacks import TensorBoard, ModelCheckpoint

EPOCHS = 10
BATCH_SIZE = 64
NAME = f"-TEST-{int(time.time())}"

df = pd.read_csv("EntryData.csv", names=['1SH5', '1SHA', '1SA5', '1SAA', '1WH5', '1WHA', '2SA5', '2SAA', '2SH5', '2SHA', '2WA5', '2WAA', '3R1', '3R2', '3R3', '3R4', '3R5', '3R6', 'Target'])

df_val = 14554 

validation_df = df[df.index > df_val]
df = df[df.index …
Run Code Online (Sandbox Code Playgroud)

python neural-network lstm keras tensorflow

0
推荐指数
1
解决办法
6211
查看次数