Keras可以处理不同大小的输入图像吗?例如,在完全卷积神经网络中,输入图像可以具有任何大小.但是,我们需要在Keras创建网络时指定输入形状.因此,我们如何使用Keras处理不同的输入大小而不将输入图像调整为相同的大小?谢谢你的帮助.
我已经为原始信号分类任务构建了CLDNN(卷积,LSTM,深度神经网络)结构.
每个训练时期运行大约90秒,超参数似乎很难优化.
我一直在研究各种方法来优化超参数(例如随机或网格搜索),并发现贝叶斯优化.
虽然我还没有完全理解优化算法,但我喜欢它会对我有很大帮助.
我想问几个关于优化任务的问题.
我非常感谢对此问题的任何见解.
optimization machine-learning bayesian deep-learning tensorflow
在大多数体系结构中,conv层后面跟着一个池化层(max/avg等).由于这些汇集层只是选择前一层的输出(即转换),我们是否可以使用带有步幅2的卷积并期望类似的精度结果和减少的过程需求?
所以我的问题是,如果我有类似的东西:
model = Model(inputs = input, outputs = [y1,y2])
l1 = 0.5
l2 = 0.3
model.compile(loss = [loss1,loss2], loss_weights = [l1,l2], ...)
Run Code Online (Sandbox Code Playgroud)
为了获得最终损失,keras做了什么损失?是这样的:
final_loss = l1*loss1 + l2*loss2
Run Code Online (Sandbox Code Playgroud)
此外,在培训期间意味着什么?loss2仅用于更新y2来自的层的权重吗?或者它是否用于所有模型的图层?
我很困惑
import pandas as pd
import numpy as np
import cv2
from torch.utils.data.dataset import Dataset
class CustomDatasetFromCSV(Dataset):
def __init__(self, csv_path, transform=None):
self.data = pd.read_csv(csv_path)
self.labels = pd.get_dummies(self.data['emotion']).as_matrix()
self.height = 48
self.width = 48
self.transform = transform
def __getitem__(self, index):
pixels = self.data['pixels'].tolist()
faces = []
for pixel_sequence in pixels:
face = [int(pixel) for pixel in pixel_sequence.split(' ')]
# print(np.asarray(face).shape)
face = np.asarray(face).reshape(self.width, self.height)
face = cv2.resize(face.astype('uint8'), (self.width, self.height))
faces.append(face.astype('float32'))
faces = np.asarray(faces)
faces = np.expand_dims(faces, -1)
return faces, self.labels
def __len__(self): …Run Code Online (Sandbox Code Playgroud) 我尝试实现提前停止功能以避免我的神经网络模型过度拟合。我很确定逻辑是正确的,但由于某种原因,它不起作用。我希望当验证损失大于某些时期的训练损失时,早期停止函数返回 True。但它始终返回 False,即使验证损失变得比训练损失大得多。请问您能看出问题出在哪里吗?
def early_stopping(train_loss, validation_loss, min_delta, tolerance):
counter = 0
if (validation_loss - train_loss) > min_delta:
counter +=1
if counter >= tolerance:
return True
Run Code Online (Sandbox Code Playgroud)
for i in range(epochs):
print(f"Epoch {i+1}")
epoch_train_loss, pred = train_one_epoch(model, train_dataloader, loss_func, optimiser, device)
train_loss.append(epoch_train_loss)
# validation
with torch.no_grad():
epoch_validate_loss = validate_one_epoch(model, validate_dataloader, loss_func, device)
validation_loss.append(epoch_validate_loss)
# early stopping
if early_stopping(epoch_train_loss, epoch_validate_loss, min_delta=10, tolerance = 20):
print("We are at epoch:", i)
break
Run Code Online (Sandbox Code Playgroud)
编辑2:
def train_validate (model, train_dataloader, validate_dataloader, loss_func, optimiser, device, epochs): …Run Code Online (Sandbox Code Playgroud) 我的问题有两个相互关联的部分:
如何计算张量的某个轴上的最大值?例如,如果我有
x = tf.constant([[1,220,55],[4,3,-1]])
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
x_max = tf.max(x, axis=1)
print sess.run(x_max)
output: [220,4]
Run Code Online (Sandbox Code Playgroud)
我知道有一个tf.argmax和一个tf.maximum,但是没有沿着单个张量的轴给出最大值.现在我有一个解决方法:
x_max = tf.slice(x, begin=[0,0], size=[-1,1])
for a in range(1,2):
x_max = tf.maximum(x_max , tf.slice(x, begin=[0,a], size=[-1,1]))
Run Code Online (Sandbox Code Playgroud)
但它看起来不太理想.有一个更好的方法吗?
给定argmax张量的指数,我如何使用这些指数索引另一个张量?使用x上面的示例,我如何执行以下操作:
ind_max = tf.argmax(x, dimension=1) #output is [1,0]
y = tf.constant([[1,2,3], [6,5,4])
y_ = y[:, ind_max] #y_ should be [2,6]
Run Code Online (Sandbox Code Playgroud)
我知道切片,就像最后一行一样,在TensorFlow中还不存在(#206).
我的问题是:对于我的特定情况,最好的解决方法是什么(可能使用其他方法,如收集,选择等)?
附加信息:我知道x并且y只会是二维张量!
我正在尝试实现一个神经网络,将图像分类为两个离散类别之一.但问题是,它目前总是为任何输入预测为0,我不确定为什么.
这是我的特征提取方法:
def extract(file):
# Resize and subtract mean pixel
img = cv2.resize(cv2.imread(file), (224, 224)).astype(np.float32)
img[:, :, 0] -= 103.939
img[:, :, 1] -= 116.779
img[:, :, 2] -= 123.68
# Normalize features
img = (img.flatten() - np.mean(img)) / np.std(img)
return np.array([img])
Run Code Online (Sandbox Code Playgroud)
这是我的梯度下降程序:
def fit(x, y, t1, t2):
"""Training routine"""
ils = x.shape[1] if len(x.shape) > 1 else 1
labels = len(set(y))
if t1 is None or t2 is None:
t1 = randweights(ils, 10)
t2 = randweights(10, labels)
params = …Run Code Online (Sandbox Code Playgroud) numpy neural-network python-3.x gradient-descent deep-learning
我正在寻找使用python(h5py)将数据附加到h5文件中的现有数据集的可能性.
我的项目简介:我尝试使用医学图像数据训练CNN.由于在将数据转换为nparrays期间需要大量数据和大量内存,我需要将"转换"拆分为几个数据块 - >加载并预处理前100个医学图像并将nparray保存到hdf5 file - >加载下一个100个数据集并附加现有的h5文件.
现在我尝试按如下方式存储前100个转换后的nparrays:
import h5py
from LoadIPV import LoadIPV
X_train_data, Y_train_data, X_test_data, Y_test_data = LoadIPV()
with h5py.File('.\PreprocessedData.h5', 'w') as hf:
hf.create_dataset("X_train", data=X_train_data, maxshape=(None, 512, 512, 9))
hf.create_dataset("X_test", data=X_test_data, maxshape=(None, 512, 512, 9))
hf.create_dataset("Y_train", data=Y_train_data, maxshape=(None, 512, 512, 1))
hf.create_dataset("Y_test", data=Y_test_data, maxshape=(None, 512, 512, 1))
Run Code Online (Sandbox Code Playgroud)
可以看出,转换后的nparray被分成四个不同的"组",存储在四个hdf5数据集[X_train,X_test,Y_train,Y_test]中.LoadIPV()函数执行医学图像数据的预处理.
我的问题是,我想将接下来的100个nparray存储到现有数据集中的同一个h5文件中:这意味着我想要附加例如现有的X_train-dataset [100,512,512,9]以及接下来的100个nparrays这样X_train变为[200,512,512,9].这同样适用于其他三个数据集X_test,Y_train,Y_test.
非常感谢您的帮助!
我正在尝试使用来自 Tensorflow 的 KMNIST 数据集和我正在使用的教科书中的一些示例代码构建一个简单的自动编码器,但是当我尝试拟合模型时,我不断收到错误消息。
错误说 ValueError: Layer sequential_20 expects 1 inputs, but it received 2 input tensors.
我对 TensorFlow 真的很陌生,我对这个错误的所有研究都让我感到困惑,因为它似乎涉及我的代码中没有的东西。 这个线程没有帮助,因为我只使用顺序层。
完整代码:
import numpy as np
import tensorflow as tf
from tensorflow import keras
import tensorflow_datasets as tfds
import pandas as pd
import matplotlib.pyplot as plt
#data = tfds.load(name = 'kmnist')
(img_train, label_train), (img_test, label_test) = tfds.as_numpy(tfds.load(
name = 'kmnist',
split=['train', 'test'],
batch_size=-1,
as_supervised=True,
))
img_train = img_train.squeeze()
img_test = img_test.squeeze()
## From Hands on Machine Learning Textbook, …Run Code Online (Sandbox Code Playgroud) deep-learning ×10
python ×5
keras ×3
tensorflow ×3
numpy ×2
pytorch ×2
bayesian ×1
h5py ×1
hdf5 ×1
max ×1
max-pooling ×1
optimization ×1
python-3.x ×1
tensor ×1