小编Mar*_*jko的帖子

如何在keras中实现自定义指标?

我收到此错误:

sum()得到一个意外的关键字参数'out'

当我运行此代码时:

import pandas as pd, numpy as np
import keras
from keras.layers.core import Dense, Activation
from keras.models import Sequential

def AUC(y_true,y_pred):
    not_y_pred=np.logical_not(y_pred)
    y_int1=y_true*y_pred
    y_int0=np.logical_not(y_true)*not_y_pred
    TP=np.sum(y_pred*y_int1)
    FP=np.sum(y_pred)-TP
    TN=np.sum(not_y_pred*y_int0)
    FN=np.sum(not_y_pred)-TN
    TPR=np.float(TP)/(TP+FN)
    FPR=np.float(FP)/(FP+TN)
    return((1+TPR-FPR)/2)

# Input datasets

train_df = pd.DataFrame(np.random.rand(91,1000))
train_df.iloc[:,-2]=(train_df.iloc[:,-2]>0.8)*1


model = Sequential()
model.add(Dense(output_dim=60, input_dim=91, init="glorot_uniform"))
model.add(Activation("sigmoid"))
model.add(Dense(output_dim=1, input_dim=60, init="glorot_uniform"))
model.add(Activation("sigmoid"))

model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=[AUC])


train_df.iloc[:,-1]=np.ones(train_df.shape[0]) #bias
X=train_df.iloc[:,:-1].values
Y=train_df.iloc[:,-1].values
print X.shape,Y.shape

model.fit(X, Y, batch_size=50,show_accuracy = False, verbose = 1)
Run Code Online (Sandbox Code Playgroud)

除了在批处理上执行循环和编辑源代码之外,是否可以实现自定义指标?

python metrics neural-network deep-learning keras

18
推荐指数
2
解决办法
3万
查看次数

Keras flowFromDirectory在生成文件名时获取文件名

是否可以获取使用加载的文件名flow_from_directory?我有 :

datagen = ImageDataGenerator(
    rotation_range=3,
#     featurewise_std_normalization=True,
    fill_mode='nearest',
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True
)

train_generator = datagen.flow_from_directory(
        path+'/train',
        target_size=(224, 224),
        batch_size=batch_size,)
Run Code Online (Sandbox Code Playgroud)

我有一个自定义生成器用于我的多输出模型,如:

a = np.arange(8).reshape(2, 4)
# print(a)

print(train_generator.filenames)

def generate():
    while 1:
        x,y = train_generator.next()
        yield [x] ,[a,y]
Run Code Online (Sandbox Code Playgroud)

节点,此刻我正在a为实际训练生成随机数,我希望加载一个json包含我的图像的边界框坐标的文件.为此,我需要获取使用train_generator.next()方法生成的文件名.在我有了之后,我可以加载文件,解析json并传递它而不是a.x变量的排序和我得到的文件名列表也是必须的.

python machine-learning neural-network keras

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

在预测期间,数据规范化如何在keras中发挥作用?

我看到imageDataGenerator允许我指定不同样式的数据规范化,例如featurewise_center,samplewise_center等.

我从示例中看到,如果我指定其中一个选项,那么我需要在生成器上调用fit方法,以便允许生成器计算统计数据,如生成器上的平均图像.

(X_train, y_train), (X_test, y_test) = cifar10.load_data()
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)

datagen = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)

# compute quantities required for featurewise normalization
# (std, mean, and principal components if ZCA whitening is applied)
datagen.fit(X_train)

# fits the model on batches with real-time data augmentation:
model.fit_generator(datagen.flow(X_train, Y_train, batch_size=32),
                samples_per_epoch=len(X_train), nb_epoch=nb_epoch)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我在培训期间指定了数据规范化,预测如何工作?我无法看到在框架中我甚至会传递训练集均值/标准偏差的知识以预测允许我自己标准化我的测试数据,但我也没有在训练代码中看到此信息是存储.

归一化所需的图像统计是否存储在模型中,以便在预测期间使用它们?

python machine-learning neural-network keras tensorflow

17
推荐指数
2
解决办法
2万
查看次数

Keras错误:预计会看到1个数组

当我尝试在keras中训练MLP模型时,我收到以下错误(我正在使用keras版本1.2.2)

检查模型输入时出错:传递给模型的Numpy数组列表不是模型预期的大小.预计会看到1个数组,但得到以下12859个数组列表:

这是模型的摘要

____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to
====================================================================================================
dense_1 (Dense)                  (None, 20)            4020        dense_input_1[0][0]
____________________________________________________________________________________________________
dense_2 (Dense)                  (None, 2)             42          dense_1[0][0]
====================================================================================================
Total params: 4,062
Trainable params: 4,062
Non-trainable params: 0
____________________________________________________________________________________________________
None
Run Code Online (Sandbox Code Playgroud)

这是模型的第一行

 model.add(Dense(20, input_shape=(200,), init='lecun_uniform', activation='tanh'))
Run Code Online (Sandbox Code Playgroud)

为了训练:

model.fit(X,Y,nb_epoch=100,verbose=1)
Run Code Online (Sandbox Code Playgroud)

其中X是元素列表,每个元素依次是200个值的列表.

编辑:

我也试过了

model.add(Dense(20, input_shape=(12859,200), init='lecun_uniform', activation='tanh'))
Run Code Online (Sandbox Code Playgroud)

但我得到了同样的错误

python machine-learning neural-network deep-learning keras

17
推荐指数
2
解决办法
2万
查看次数

Keras:如何在自定义损失中获得张量尺寸?

我正在尝试编写自定义丢失函数:我想应用于categorical_crossentropy输入向量的部分然后求和.

假设y_true,y_pred是1D向量.

码:

def custom_loss(y_true, y_pred):

    loss_sum= 0.0
    for i in range(0,y_true.shape[0],dictionary_dims):
        loss_sum+= keras.backend.categorical_crossentropy(y_true[i*dictionary_dims:(i+1)*dictionary_dims], y_pred[i*dictionary_dims:(i+1)*dictionary_dims])

    return loss_sum
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

    for i in range(0,y_true.shape[0],dictionary_dims):
TypeError: __index__ returned non-int (type NoneType)
Run Code Online (Sandbox Code Playgroud)

那么如何访问输入张量的形状来获得张量的子集呢?

更新: 还尝试直接通过tensorflow写丢失:

def custom_loss_tf(y_true, y_pred):

    print('tf.shape(y_true)',tf.shape(y_true)) #
    print('type(tf.shape(y_true))',type(tf.shape(y_true))) #

    sys.exit()

    loss_sum= 0.0
    for i in range(0,y_true.shape[0],dictionary_dims):
        loss_sum+= keras.backend.categorical_crossentropy(y_true[i*dictionary_dims:(i+1)*dictionary_dims], y_pred[i*dictionary_dims:(i+1)*dictionary_dims])

    return loss_sum
Run Code Online (Sandbox Code Playgroud)

输出:

tf.shape(y_true) Tensor("Shape:0", shape=(2,), dtype=int32)
type(tf.shape(y_true)) <class 'tensorflow.python.framework.ops.Tensor'>
Run Code Online (Sandbox Code Playgroud)

不确定是什么shape=(2,)意思,但这不是我所期待的,因为model.summary()显示最后一层是(None, 26):

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         (None, 80, …
Run Code Online (Sandbox Code Playgroud)

python neural-network deep-learning keras tensorflow

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

使用Keras进行视频预测(时间序列)

我想预测给定N前一帧的(灰度)视频的下一帧 - 使用Keras中的CNN或RNN.关于时间序列预测和Keras的大多数教程和其他信息在他们的网络中使用1维输入,但我的是3D(N frames x rows x cols)

我现在真的不确定这个问题的好方法是什么.我的想法包括:

  • 使用一个或多个LSTM图层.这里的问题是我不确定他们是否适合拍摄一系列图像而不是一系列标量作为输入.内存消耗不会爆炸吗?如果可以使用它们:我如何在Keras中使用它们以获得更高的尺寸?

  • 在输入上使用3D卷积(先前视频帧的堆栈).这提出了其他问题:为什么在我不进行分类而是预测时这会有所帮助?如何以网络输入具有尺寸(N x cols x rows)和输出的方式堆叠图层(1 x cols x rows)

我对CNN/RNN和Keras很陌生,并希望能够向正确的方向发出任何暗示.

machine-learning time-series neural-network lstm keras

16
推荐指数
2
解决办法
8226
查看次数

如何使用Keras处理CNN中的可变大小输入?

我试图在MNIST数据库上执行通常的分类,但随机裁剪的数字.图像按以下方式裁剪:随机删除第一个/最后一个和/或行/列.

我想使用使用Keras(和Tensorflow后端)的卷积神经网络来执行卷积,然后进行通常的分类.

输入的大小可变,我无法让它工作.

这是我如何裁剪数字

import numpy as np
from keras.utils import to_categorical
from sklearn.datasets import load_digits

digits = load_digits()

X = digits.images
X = np.expand_dims(X, axis=3)

X_crop = list()
for index in range(len(X)):
    X_crop.append(X[index, np.random.randint(0,2):np.random.randint(7,9), np.random.randint(0,2):np.random.randint(7,9), :])
X_crop = np.array(X_crop)

y = to_categorical(digits.target)

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X_crop, y, train_size=0.8, test_size=0.2)
Run Code Online (Sandbox Code Playgroud)

这是我想要使用的模型的架构

from keras.layers import Dense, Dropout
from keras.layers.convolutional import Conv2D
from keras.models import Sequential

model = Sequential()

model.add(Conv2D(filters=10, 
                 kernel_size=(3,3), 
                 input_shape=(None, None, 1), 
                 data_format='channels_last'))

model.add(Dense(128, …
Run Code Online (Sandbox Code Playgroud)

python machine-learning neural-network deep-learning keras

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

如何利用外部特征为LSTM构建具有时间序列多步幅度的输入数据?

我正在尝试使用LSTM进行商店销售预测.以下是我的原始数据的样子:

|     Date   | StoreID | Sales | Temperature |  Open   | StoreType |
|------------|---------|-------|-------------|---------|-----------|
| 01/01/2016 |   1     |   0   |      36     |    0    |     1     |
| 01/02/2016 |   1     | 10100 |      42     |    1    |     1     |
| ...
| 12/31/2016 |   1     | 14300 |      39     |    1    |     1     |
| 01/01/2016 |   2     | 25000 |      46     |    1    |     3     |
| 01/02/2016 |   2     | 23700 |      43     |    1    | …
Run Code Online (Sandbox Code Playgroud)

time-series neural-network lstm keras recurrent-neural-network

15
推荐指数
1
解决办法
4588
查看次数

CPU上的Theano CNN:AbstractConv2d Theano优化失败

我正在尝试使用CIFAR10数据集训练CNN在图像上进行物体检测,以便在我的大学举办研讨会,但是我得到以下错误:

AssertionError:AbstractConv2d Theano优化失败:没有可用的实现支持所请求的选项.你是否从优化器中排除了"conv_dnn"和"conv_gemm"?如果在GPU上,cuDNN可用并且GPU是否支持它?如果在CPU上,你是否安装了Theano可以链接的BLAS库?

我在Windows 10机器上的Jupyter笔记本(CPU上的CNN培训)中运行Anaconda 2.7.由于我已经使用git clone更新到最新的theano版本,我尝试了以下方法:

  • 直接从代码中排除dnn和gemm THEANO_FLAGS='optimizer_excluding=conv_dnn, optimizer_excluding=conv_gemm'
  • 直接从cmd输入中排除dnn和gemm,THEANO_FLAGS='...' python <myscript>.py这并不令人惊讶地发出"未知命令"错误.
  • 从我放入C:/ user/myusername的.theanorc.txt中排除dnn和gemm

不幸的是,我仍然得到相同的错误,当我调用print(teano.config)术语"conv_dnn"和"conv_gemm"时,不会出现.

  • 此外,我试图找出我的numpy包正在使用什么BLAS(通常效果很好),如果使用来自dependencywalker.com的工具该包是静态的,但我失败了

所以这是我的问题:我怎样才能正确地设置theano标志,如何检查我是否成功了?如果这没有帮助,我该如何检查我正在构建的BLAS?我应该使用哪一个,如何更改theano的依赖?

正如你可能已经猜到的那样,对于所有这些包,依赖,构建和其他花哨的计算机科学的东西和我发现的文档只是不是noob证明所以我不是专家所以我会非常感激我们你们可以帮助我出来了!

最好

乔纳斯

python cpu blas neural-network theano

14
推荐指数
3
解决办法
8695
查看次数

如何计算LSTM网络的参数数量?

有没有办法计算LSTM网络中的参数总数.

我找到了一个例子,但我不确定是多么正确或者我是否理解正确.

例如,考虑以下示例: -

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.layers import Embedding
from keras.layers import LSTM
model = Sequential()
model.add(LSTM(256, input_dim=4096, input_length=16))
model.summary()
Run Code Online (Sandbox Code Playgroud)

产量

____________________________________________________________________________________________________
Layer (type)                       Output Shape        Param #     Connected to                     
====================================================================================================
lstm_1 (LSTM)                      (None, 256)         4457472     lstm_input_1[0][0]               
====================================================================================================
Total params: 4457472
____________________________________________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

根据我的理解n是输入向量长度.并且m是时间步数.在这个例子中,他们认为隐藏层的数量为1.

因此根据帖子中 的公式.4(nm+n^2)在我的例子中m=16; n=4096;num_of_units=256

4*((4096*16)+(4096*4096))*256 = 17246978048
Run Code Online (Sandbox Code Playgroud)

为什么会有这样的差异?我误解了这个例子还是公式错了?

machine-learning neural-network deep-learning lstm keras

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