我正在使用Keras2.0.0,我想在GPU上训练一个具有大量参数的深度模型。使用太大的图像,我的内存不足(OOM)。使用太低的图像,模型的准确性会比可能的差。因此,我想找到适合我的GPU的图像的最大可能输入大小。给定模型和输入数据,是否有任何计算内存的功能(例如,与model.summary()相当)?感谢您的帮助。 最佳答案 我根据FabrícioPereira的回答创建了一个完整的函数。defget_model_memory_usage(batch_size,model):importnumpyasnptry:fromkera
我一直在搞Keras,到目前为止我喜欢它。在处理相当深的网络时,我遇到了一个大问题:在调用model.train_on_batch或model.fit等时,Keras分配的GPU内存明显多于模型本身所需的内存。这不是因为尝试在一些非常大的图像上训练造成的,而是网络模型本身似乎需要大量GPU内存。我创建了这个玩具示例来说明我的意思。这基本上是发生了什么:我首先创建了一个相当深的网络,并使用model.summary()获取网络所需的参数总数(在本例中为206538153,相当于大约826MB)。然后我使用nvidia-smi来查看Keras分配了多少GPU内存,我可以看到它非常有意义(8
我们目前正在使用Keras训练各种神经网络,这是非常理想的,因为它具有良好的界面并且相对易于使用,但我们希望能够将它们应用到我们的生产环境中。可惜生产环境是C++,所以我们的计划是:使用TensorFlow后端将模型保存到protobuf将我们的生产代码链接到TensorFlow,然后加载到protobuf不幸的是,我不知道如何从Keras访问TensorFlow保存实用程序,这些实用程序通常保存为HDF5和JSON。如何保存到protobuf? 最佳答案 如果您不需要在要部署的环境中使用GPU,您也可以使用我的库,称为frugal
我想在Keras中获得预训练的VGG16模型,删除它的输出层,然后放置一个新的输出层,其中包含适合我的问题的类数量,然后将其拟合到新数据上。出于这个原因,我在这里尝试使用该模型:https://keras.io/applications/#vgg16,但由于它不是顺序的,我不能只是model.pop()。从图层弹出并添加它也不起作用,因为在预测中它仍然期望旧形状。我该怎么做?有没有办法将这种类型的模型转换为Sequential? 最佳答案 您可以在model.layers上使用pop(),然后使用model.layers[-1].o
我正在测试我的新NVIDIATitanV,它支持float16操作。我注意到在训练过程中,float16(~800ms/step)比float32(~500ms/step)慢得多。为了进行float16操作,我将keras.json文件更改为:{"backend":"tensorflow","floatx":"float16","image_data_format":"channels_last","epsilon":1e-07}为什么float16操作这么慢?我是否需要修改我的代码而不仅仅是keras.json文件?我在Windows10上使用CUDA9.0、cuDNN7.0、ten
注意:用于重现我的问题的独立示例的所有代码都可以在下面找到。我有一个tf.keras.models.Model实例,需要使用用低级TensorFlowAPI编写的训练循环对其进行训练。问题:使用基本的标准低级TensorFlow训练循环训练完全相同的tf.keras模型一次,使用Keras自己的model.fit()方法训练一次会产生非常不同的结果。我想找出我在低级TF训练循环中做错了什么。该模型是我在Caltech256上训练的一个简单的图像分类模型(链接到下面的tfrecords)。在低级TensorFlow训练循环中,训练损失首先会减少,但在1000次训练步骤之后,损失会达到稳定
我想使用Keras做一些类似于完全卷积网络论文(https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn.pdf)的事情。我有一个网络,它最终将特征图展平并通过几个密集层运行它们。我想将这样的网络中的权重加载到其中密集层被等效卷积替换的网络中。可以以Keras自带的VGG16网络为例,其中最后一个MaxPooling2D()的7x7x512输出被展平,然后进入Dense(4096)层。在这种情况下,密集(4096)将被替换为7x7x4096卷积。我的真实网络略有不同,有一个GlobalAveragePooling2D()层
问题:我正在训练一个用于多标签图像识别的模型。因此,我的图像与多个y标签相关联。这与ImageDataGenerator的便捷keras方法“flow_from_directory”相冲突,其中每个图像都应该位于相应标签(https://keras.io/preprocessing/image/)的文件夹中。解决方法:目前,我正在将所有图像读入一个numpy数组并从那里使用“流”功能。但这会导致内存负载过重和读入过程缓慢。问题:有没有办法使用“flow_from_directory”方法并手动提供(多个)类标签?更新:我最终为多标签案例扩展了DirectoryIterator类。您现在
我在做什么我正在训练并使用卷积神经元网络(CNN)进行图像分类,使用Keras和Tensorflow-gpu作为后端。我正在使用什么-PyCharm社区2018.1.2-Python2.7和3.5(但不能同时使用)-Ubuntu16.04-Keras2.2.0-Tensorflow-GPU1.8.0作为后端我想知道的在许多代码中,我看到人们使用fromkerasimportbackendasK#Dosomecode,e.g.trainandsavemodelK.clear_session()或使用后删除模型:delmodel关于clear_session的keras文档说:“销毁当前的
我有一组Keras模型(30),我使用以下方法训练和保存:model.save('model{0}.h5'.format(n_model))当我尝试使用load_model加载它们时,每个模型所需的时间都非常长且递增。加载完成如下:models={}foriinrange(30):start=time.time()models[i]=load_model('model{0}.h5'.format(ix))end=time.time()print"Model{0}:seconds{1}".format(ix,end-start)输出是:...Model9:seconds7.3896601