小编Mar*_*jko的帖子

是什么让GPU在神经网络计算中如此高效?

最近,我尝试在大CPU服务器上实现和部署深度学习解决方案(具有用于静态输入的附加层的多层LSTM网络).经过多次尝试,与个人计算机上的性能相比,我的速度只提高了3倍.我听说GPU可能会做得更好.你能解释一下,在深度神经网络计算方面,GPU的优势是什么?

cpu performance gpu neural-network

5
推荐指数
1
解决办法
329
查看次数

Tensorflow或Keras中的离散权重和激活

您知道约束tensorflowkeras设置一组离散权重并使用离散/刚性激活函数(例如like signhard-tanh)的方法吗?

这些API似乎只有平滑的激活功能。

我还想到了通过自定义正则化函数离散权重,但是我不知道如何使框架考虑到这一点。

可能我将不得不扩展(例如)(各自框架的)密集层类,并定义一个自定义的正向传播函数(及其派生类)。你有什么例子吗?

machine-learning neural-network deep-learning keras tensorflow

5
推荐指数
1
解决办法
1083
查看次数

了解随机起始权重对神经网络性能的影响

使用R和包neuralnet,我尝试模拟如下所示的数据:

培训数据

这些是几天内以10分钟为间隔的温度读数(上面是2天的切口).使用下面的代码,我将神经网络拟合到数据中.可能有更简单的方法来建模这些确切的数据,但将来数据可能看起来很不一样.使用具有2个神经元的单个隐藏层给出了令人满意的结果:

良好的神经网络性能

这也适用于大多数层和神经元.然而,有一个隐藏层有一个神经元,偶尔有两层(在我的情况下分别为3和2个神经元),我的结果相当差,总是在同一个形状:

神经网络性能差

唯一随机的是初始化权重,所以我认为它与此相关.但是,我必须承认,我还没有完全掌握神经网络的理论.我想知道的是,糟糕的结果是由于局部最小值('神经网络'使用弹性反向传播,默认情况下重量回溯)我只是运气不好,或者我是否可以避免这种情况.我的印象是有一个最佳数量的隐藏节点用于拟合,例如2度,5度,10度的多项式.如果不是,那么我最好的行动方案是什么?学习率更高?错误阈值较小?提前致谢.

我还没有尝试调整rprop参数,所以解决方案可能就在那里.

码:

# DATA ----------------------
minute <- seq(0, 6*24 - 1)
temp <- rep.int(17, 6*24)
temp[(6*7):(6*20)] <- 20
n <- 10
dta <- data.frame(Zeit = minute, Status = temp)
dta <- dta[rep(seq_len(nrow(dta)), n), ]
# Scale everything
maxs <- apply(dta, 2, max) 
mins <- apply(dta, 2, min)

nnInput <- data.frame(Zeit = dta$Zeit, Status = dta$Status)
nnInput <- as.data.frame(scale(nnInput, center = mins, scale = maxs - mins))
trainingData <- …
Run Code Online (Sandbox Code Playgroud)

r machine-learning neural-network deep-learning

5
推荐指数
2
解决办法
659
查看次数

Keras中卷积自编码器的输出大小

我在做Keras库作者写的卷积自编码器教程:https ://blog.keras.io/building-autoencoders-in-keras.html

但是,当我启动完全相同的代码,并使用 summary() 分析网络架构时,似乎输出大小与输入大小不兼容(在自动编码器的情况下是必需的)。这是summary()的输出:

**____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
input_1 (InputLayer)             (None, 1, 28, 28)     0                                            
____________________________________________________________________________________________________
convolution2d_1 (Convolution2D)  (None, 16, 28, 28)    160         input_1[0][0]                    
____________________________________________________________________________________________________
maxpooling2d_1 (MaxPooling2D)    (None, 16, 14, 14)    0           convolution2d_1[0][0]            
____________________________________________________________________________________________________
convolution2d_2 (Convolution2D)  (None, 8, 14, 14)     1160        maxpooling2d_1[0][0]             
____________________________________________________________________________________________________
maxpooling2d_2 (MaxPooling2D)    (None, 8, 7, 7)       0           convolution2d_2[0][0]            
____________________________________________________________________________________________________
convolution2d_3 (Convolution2D)  (None, 8, 7, 7)       584         maxpooling2d_2[0][0]             
____________________________________________________________________________________________________
maxpooling2d_3 (MaxPooling2D)    (None, 8, 3, 3)       0           convolution2d_3[0][0]            
____________________________________________________________________________________________________
convolution2d_4 (Convolution2D) …
Run Code Online (Sandbox Code Playgroud)

python neural-network autoencoder deep-learning keras

5
推荐指数
1
解决办法
1014
查看次数

在 Keras 中使用卷积神经网络后使用 LSTM 时的维度错误

在 keras 1.2.2 中,我制作了一个具有以下维度的数据集:

X_train: (2000, 100, 32, 32, 3) 
y_train: (2000,1)
Run Code Online (Sandbox Code Playgroud)

这里,2000 是实例数(数据的批次),100 是每批中的样本数,32 是图像行和列数,3 是通道数(RGB)。

我写了这段代码,它在 CNN 之后应用了 LSTM,但是,我收到了这个错误:

ValueError: Input 0 is incompatible with layer lstm_layer: expected ndim=3, found ndim=2

这是我的代码:

import keras
from keras.layers import Input ,Dense, Dropout, Activation, LSTM
from keras.layers import Convolution2D, MaxPooling2D, Flatten, Reshape
from keras.models import Sequential
from keras.layers.wrappers import TimeDistributed
from keras.layers.pooling import GlobalAveragePooling1D
from keras.optimizers import SGD
from keras.utils import np_utils
from keras.models import Model


import numpy as np

timesteps=100; …
Run Code Online (Sandbox Code Playgroud)

machine-learning neural-network lstm keras recurrent-neural-network

5
推荐指数
1
解决办法
661
查看次数

如何在Keras中保存编码的输出

我想在带有Tensorflow后端的Keras自动编码器模型中的解码器阶段之前保存编码部分。

例如;

encoding_dim = 210
input_img = Input(shape=(5184,))

encoded = Dense(2592, activation='relu')(input_img)
encoded1 = Dense(encoding_dim, activation='relu')(encoded)

decoded = Dense(encoding_dim, activation='relu')(encoded1)
decoded = Dense(5184, activation='sigmoid')(decoded)
Run Code Online (Sandbox Code Playgroud)

我想encoded1在自动编码器训练后另存为csv文件。假设输出Dense将为(nb_samples, output_dim)

谢谢

csv machine-learning neural-network keras tensorflow

5
推荐指数
1
解决办法
2925
查看次数

从瓶颈特征训练密集层与冻结除最后一层之外的所有层 - 应该相同,但它们的行为不同

作为“健全性检查”,我尝试了两种使用转移学习的方法,我希望它们的行为相同,如果不是在运行时间而不是在结果中。

第一种方法是使用瓶颈特征(如此处所述https://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html),即使用现有预测器在最后一个密集层之前生成特征,保存它们,然后使用这些特征作为输入训练新的密集层。

第二种方法是用新的模型替换模型的最后一个密集层,然后冻结模型中的所有其他层。

我希望第二种方法和第一种方法一样有效,但事实并非如此。

第一种方法的输出是

 Epoch 1/50
16/16 [==============================] - 0s - loss: 1.3095 - acc: 0.4375 - val_loss: 0.4533 - val_acc: 0.7500
Epoch 2/50
16/16 [==============================] - 0s - loss: 0.3555 - acc: 0.8125 - val_loss: 0.2305 - val_acc: 1.0000
Epoch 3/50
16/16 [==============================] - 0s - loss: 0.1365 - acc: 1.0000 - val_loss: 0.1603 - val_acc: 1.0000
Epoch 4/50
16/16 [==============================] - 0s - loss: 0.0600 - acc: 1.0000 - val_loss: 0.1012 - val_acc: 1.0000
Epoch …
Run Code Online (Sandbox Code Playgroud)

python neural-network deep-learning keras keras-layer

5
推荐指数
1
解决办法
838
查看次数

如何使用Keras model.evaluate_generator

我在下面使用了数据扩充来节省内存。

total number of test images = 400
batch size = 128
Run Code Online (Sandbox Code Playgroud)

当我使用model.evaluate_generator检查测试集的准确性时,与我模型的最后一个时期的finalvalidation_accuracy不同。而且,model.evaluate_generator当我重复这个的时候,输出改变。

下面是我的代码。

请帮忙!

train_datagen = ImageDataGenerator(
        rescale=1./255,)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        color_mode= "grayscale",
        target_size=(img_width, img_height),
        batch_size=128,
        class_mode='categorical',)    

validation_generator = test_datagen.flow_from_directory(
        validation_data_dir,
        color_mode= "grayscale",
        target_size=(img_width, img_height),
        batch_size=128,
        class_mode='categorical')

#%%
hist = model.fit_generator(
        train_generator,
        samples_per_epoch=nb_train_samples,
        nb_epoch=nb_epoch,
        validation_data=validation_generator,
        nb_val_samples=nb_validation_samples)

scoreSeg = model.evaluate_generator(validation_generator, 400)
print("Accuracy = ",scoreSeg[1])
Run Code Online (Sandbox Code Playgroud)

theano keras

5
推荐指数
0
解决办法
4228
查看次数

在Keras中训练和验证具有不同分辨率的图像

我正在使用Keras构建卷积神经网络来执行从显微图像到2D标签数据(用于计数)的回归.我正在研究在较小的微观数据补丁上训练网络(其中补丁是感受野的大小).问题是,该fit()方法要求验证数据与输入的大小相同.相反,我希望能够验证整个图像(而不是补丁),以便我可以在整个验证集上进行验证,并将结果与​​我迄今使用的其他方法进行比较.

一种解决方案,我发现是之间交替fit()evaluate()每个历元.但是,我希望能够使用Tensorboard观察这些结果.由于evaluate()不接受回调,这种解决方案并不理想.在修补补丁的过程中,有没有人能够很好地验证全分辨率图像?

python validation machine-learning neural-network keras

5
推荐指数
1
解决办法
469
查看次数

Keras培训warm_start

是否有可能继续训练Keras估计器,其中包含所有超参数(包括降低学习率)和从先前时期保存的权重,就像在scikit中学习warm_start参数一样?像这样的东西:

estimator = KerasRegressor(build_fn=create_model, epochs=20, batch_size=40, warm_start=True)
Run Code Online (Sandbox Code Playgroud)

具体来说,热启动应该这样做:

warm_start:bool,optional,default False设置为True时,重用上一次调用的解决方案以适合初始化,否则,只需擦除以前的解决方案.

在Keras有类似的东西吗?

python machine-learning neural-network scikit-learn keras

5
推荐指数
1
解决办法
1738
查看次数