- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 keras 中有以下神经网络(可能没有必要对其进行审查来回答我的问题:
简短摘要:它是一个以图像作为输入并输出图像的神经网络。神经网络主要是卷积网络。我使用发电机。另外,我有两个回调:一个用于 TensorBoard,一个用于检查点保存
class modelsClass(object):
def __init__(self, img_rows = 272, img_cols = 480):
self.img_rows = img_rows
self.img_cols = img_cols
def addPadding(self, layer, level): #height, width, level):
w1, h1 = self.img_cols, self.img_rows
w2, h2 = int(w1/2), int(h1/2)
w3, h3 = int(w2/2), int(h2/2)
w4, h4 = int(w3/2), int(h3/2)
h = [h1, h2, h3, h4]
w = [w1, w2, w3, w4]
# Target width and height
tw = w[level-1]
th = h[level-1]
# Source width and height
lsize = keras.int_shape(layer)
sh = lsize[1]
sw = lsize[2]
pw = (0, tw - sw)
ph = (0, th - sh)
layer = ZeroPadding2D(padding=(ph, pw), data_format="channels_last")(layer)
return layer
[我需要在此处用一些文本破坏代码才能发布问题]
def getmodel(self):
input_blurred = Input((self.img_rows, self.img_cols,3))
conv1 = Conv2D(64, (3, 3), activation='relu', padding='same')(input_blurred)
conv1 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv1)
pool1 = MaxPooling2D(pool_size=(2, 2))(conv1)
conv2 = Conv2D(128, (3, 3), activation='relu', padding='same')(pool1)
conv2 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv2)
pool2 = MaxPooling2D(pool_size=(2, 2))(conv2)
conv3 = Conv2D(256, (3, 3), activation='relu', padding='same')(pool2)
conv3 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv3)
pool3 = MaxPooling2D(pool_size=(2, 2))(conv3)
conv4 = Conv2D(512, (3, 3), activation='relu', padding='same')(pool3)
conv4 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv4)
pool4 = MaxPooling2D(pool_size=(2, 2))(conv4)
conv5 = Conv2D(1024, (3, 3), activation='relu', padding='same')(pool4)
conv5 = Conv2D(1024, (3, 3), activation='relu', padding='same')(conv5)
up6 = Conv2DTranspose(512, (2, 2), strides=(2, 2), padding='same')(conv5)
up6 = self.addPadding(up6,level=4)
up6 = concatenate([up6,conv4], axis=3)
conv6 = Conv2D(512, (3, 3), activation='relu', padding='same')(up6)
conv6 = Conv2D(512, (3, 3), activation='relu', padding='same')(conv6)
up7 = Conv2DTranspose(256, (2, 2), strides=(2, 2), padding='same')(conv6)
up7 = self.addPadding(up7,level=3)
up7 = concatenate([up7,conv3], axis=3)
conv7 = Conv2D(256, (3, 3), activation='relu', padding='same')(up7)
conv7 = Conv2D(256, (3, 3), activation='relu', padding='same')(conv7)
up8 = Conv2DTranspose(128, (2, 2), strides=(2, 2), padding='same')(conv7)
up8 = self.addPadding(up8,level=2)
up8 = concatenate([up8,conv2], axis=3)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(up8)
conv8 = Conv2D(128, (3, 3), activation='relu', padding='same')(conv8)
up9 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(conv8)
up9 = self.addPadding(up9,level=1)
up9 = concatenate([up9,conv1], axis=3)
conv9 = Conv2D(64, (3, 3), activation='relu', padding='same')(up9)
conv9 = Conv2D(64, (3, 3), activation='relu', padding='same')(conv9)
conv10 = Conv2D(3, (1, 1), activation='linear')(conv9)
model = Model(inputs=input_blurred, outputs=conv10)
return model
那么代码是:
models = modelsClass(720, 1280)
model = models.getmodel()
model.compile(optimizer='adam', loss='mean_absolute_error')
model_checkpoint = ModelCheckpoint('checkpoints/cp.ckpt', monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', save_freq='epoch')
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir='some_dir', histogram_freq=1)
model_history = model.fit_generator(generator_train, epochs=3,
steps_per_epoch=900,
callbacks=[tensorboard_callback, model_checkpoint],
validation_data=generator_val, validation_steps=100)
其中 generator_train.__len__ = 900
,generator_val.__len__ = 100
,两者的批量大小 = 1。
第 1 轮的时间为 10 分钟,第 2 轮的时间为 3 小时。我想知道可能是什么问题
最佳答案
以下是一些可能降低程序速度的常见因素:
关于python - 为什么 epoch 2 比 epoch 1 花费的时间多 18 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59917535/
我一直在读一本分配给类(class)的书,它提到数组访问需要 O(1) 时间。我意识到这非常快(也许尽可能快),但是如果您有一个循环必须多次引用它,那么分配一个临时变量以在数组中查找值有什么好处吗?或
我一直试图找出为什么这个查询花了这么长时间。以前,它的执行时间约为 150 毫秒到 200 毫秒,但现在需要 25 秒或更长时间。这是从昨晚到今天之间的事。唯一改变的就是将数据添加到表中。 根据下面的
我有一个 ng repeat 重复数据。 - data.image(src)部分为null,src=null的不再重复。 我用一个简单的 ng-if 解决了它。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我已经被这个问题困扰了一段时间了,我被难住了。 Automapper 需要 4 秒来映射 19 个对象。在我的机器(24GB 内存,3.6Ghz i7)上,该操作应该花费毫秒或纳秒。 这是映射调用。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我在机器 A 上有一个 java 进程通过 TCP 与机器 B 上的 Tomcat 通信。 TCP 连接(只是 syn-syn/ack 交换)始终需要 100 毫秒的数量级,而 ping 请求需要 1
我做了一项任务,从 sqlserver 获取超过 200 万条记录并将它们填充到 Asp.net GridView 中。 问题是,查询需要超过 2 分钟才能获得记录,而我的查询现在已经完全优化。 当我
我希望将 165 秒变成 2:40 而不是 0:2:45 函数需要能够适应秒值的大小。 我知道有无数种方法可以做到这一点,但我正在寻找一种干净的方法来做到这一点,除了 jQuery 之外没有任何外部库
我是一名优秀的程序员,十分优秀!