我用来拟合SVM,我想知道所有拟合模型的GridSearchCV支持向量的数量。目前我只能访问此 SVM 的属性以获得最佳模型。
玩具示例:
import numpy as np
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
clf = SVC()
params = {'C': [0.01, 0.1, 1]}
search = GridSearchCV(estimator=clf, cv=2, param_grid=params, return_train_score=True)
search.fit(X, y);
Run Code Online (Sandbox Code Playgroud)
最佳模型的支持向量数量:
search.best_estimator_.n_support_
Run Code Online (Sandbox Code Playgroud)
如何获得n_support_所有型号的?正如我们分别获得每个参数的训练/测试误差一样C。
使用 NumPy,您可以使用 np.invert(array) 来实现,但 Pytorch 中没有反转功能。假设我有一个布尔值的二维张量:
import torch
ts = torch.rand((10, 4)) < .5
Run Code Online (Sandbox Code Playgroud)
tensor([[ True, True, False, True],
[ True, True, True, True],
[ True, False, True, True],
[False, True, True, False],
[False, True, True, True],
[ True, True, True, True],
[ True, False, True, True],
[False, True, False, True],
[ True, True, False, True],
[False, False, True, False]])
Run Code Online (Sandbox Code Playgroud)
如何将 False 转换为 True,反之亦然?
在我的 Tensorflow 神经网络开始训练之前,会打印出以下警告:
警告:tensorflow:Layer my_model 正在将输入张量从 dtype float64 转换为 float32 层的 dtype,这是 TensorFlow 2 中的新行为。该层具有 dtype float32,因为它的 dtype 默认为 floatx。如果您打算在 float32 中运行此层,则可以安全地忽略此警告。
如果有疑问,如果您将 TensorFlow 1.X 模型移植到 TensorFlow 2,则此警告可能只是一个问题。要将所有层更改为默认情况下具有 dtype float64,请调用
tf.keras.backend.set_floatx('float64').
要仅更改此图层,请将 dtype='float64' 传递给图层构造函数。如果您是该层的作者,您可以通过将 autocast=False 传递给基础层构造函数来禁用自动转换。
现在,根据错误消息,我可以通过将后端设置为'float64'. 但是,我想深入了解并dtypes手动设置正确的。
完整代码:
import tensorflow as tf
from tensorflow.keras.layers import Dense, Concatenate
from tensorflow.keras import Model
from sklearn.datasets import load_iris
iris, target = load_iris(return_X_y=True)
X = iris[:, :3]
y = iris[:, 3]
ds = tf.data.Dataset.from_tensor_slices((X, y)).shuffle(25).batch(8)
class …Run Code Online (Sandbox Code Playgroud) 我正在关注这个 Tensorflow教程。在底部,它显示单击“立即同步”。那到底是什么?
我正在考虑为时间序列 LSTM 模型创建管道。我有两个输入提要,我们称它们为series1和series2。
我tf.data通过调用来初始化对象from.tensor.slices:
ds = tf.data.Dataset.from_tensor_slices((series1, series2))
Run Code Online (Sandbox Code Playgroud)
我将它们进一步批处理到设定窗口大小的窗口中,并在窗口之间移动 1:
ds = ds.window(window_size + 1, shift=1, drop_remainder=True)
Run Code Online (Sandbox Code Playgroud)
此时我想尝试一下它们是如何批处理在一起的。我想生成如下所示的特定输入作为示例:
series1 = [1, 2, 3, 4, 5]
series2 = [100, 200, 300, 400, 500]
batch 1: [1, 2, 100, 200]
batch 2: [2, 3, 200, 300]
batch 3: [3, 4, 300, 400]
Run Code Online (Sandbox Code Playgroud)
因此,每个批次将返回Series1的两个元素,然后返回Series2的两个元素。此代码片段无法单独批处理它们:
ds = ds.map(lambda s1, s2: (s1.batch(window_size + 1), s2.batch(window_size + 1))
Run Code Online (Sandbox Code Playgroud)
因为它返回数据集对象的两个映射。由于它们是对象,因此它们不可订阅,因此这也不起作用:
ds = ds.map(lambda s1, s2: (s1[:2], s2[:2])) …Run Code Online (Sandbox Code Playgroud) 例如,我需要创建一个像这样的 3D 张量 (5,3,2)
array([[[0, 0],
[0, 1],
[0, 0]],
[[1, 0],
[0, 0],
[0, 0]],
[[0, 0],
[1, 0],
[0, 0]],
[[0, 0],
[0, 0],
[1, 0]],
[[0, 0],
[0, 1],
[0, 0]]])
Run Code Online (Sandbox Code Playgroud)
每个切片中都应该随机放置一个“1”(如果您将张量视为一条面包)。这可以使用循环来完成,但我想向量化这部分。
我已经成功地在我的 Keras 模型中实现了提前停止,但我不确定如何看待最佳时代的损失。
es = EarlyStopping(monitor='val_out_soft_loss',
mode='min',
restore_best_weights=True,
verbose=2,
patience=10)
model.fit(tr_x,
tr_y,
batch_size=batch_size,
epochs=epochs,
verbose=1,
callbacks=[es],
validation_data=(val_x, val_y))
loss = model.history.history["val_out_soft_loss"][-1]
return model, loss
Run Code Online (Sandbox Code Playgroud)
我定义损失分数的方式意味着返回的分数来自最后一个时期,而不是最好的时期。
例子:
from sklearn.model_selection import train_test_split, KFold
losses = []
models = []
for k in range(2):
kfold = KFold(5, random_state = 42 + k, shuffle = True)
for k_fold, (tr_inds, val_inds) in enumerate(kfold.split(train_y)):
print("-----------")
print("-----------")
model, loss = get_model(64, 100)
models.append(model)
print(k_fold, loss)
losses.append(loss)
print("-------")
print(losses)
print(np.mean(losses))
Epoch 23/100
18536/18536 [==============================] - 7s 362us/step - …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现 VGG,但收到上述奇怪的错误。我在 Ubuntu 上运行 TFv2。这可能是因为我没有运行 CUDA 吗?
代码来自这里。
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
# Imports
import time
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
# tf.logging.set_verbosity(tf.logging.INFO)
from tensorflow.keras.layers import Conv2D, Dense, Flatten
np.random.seed(1)
mnist = tf.keras.datasets.mnist
(train_data, train_labels), (eval_data, eval_labels) = mnist.load_data()
train_data, train_labels = train_data / 255.0, train_labels / 255.0
# Add a channels dimension
train_data = train_data[..., tf.newaxis]
train_labels = train_labels[..., tf.newaxis]
index = …Run Code Online (Sandbox Code Playgroud) 我正在尝试显示存储为 pytorch 张量的图像。
trainset = datasets.ImageFolder('data/Cat_Dog_data/train/', transform=transforms)
trainload = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)
images, labels = iter(trainload).next()
image = images[0]
image.shape
>>> torch.Size([3, 224, 224]) # pyplot doesn't like this, so reshape
image = image.reshape(224,224,3)
plt.imshow(image.numpy())
Run Code Online (Sandbox Code Playgroud)
此方法显示同一图像的 3 x 3 网格,始终以灰度显示。例如:
如何解决此问题以便正确显示单色图像?
我正在循环浏览图像文件夹,这种情况一直在发生。
tensorflow.python.framework.errors_impl.InvalidArgumentError:预期图像(JPEG、PNG 或 GIF),格式未知,以 '\000\000\000\000\000\000\000\000\000\000\000\ 开头000\000\000\000\000' [[{{node DecodeJpeg}}]]
这个文件夹中有一些不是图像的文件,但它们应该被我的上一步过滤掉。任何人都知道发生了什么?
test_files_ds = tf.data.Dataset.list_files(myFolder + '/*.jpg')
AUTOTUNE = tf.data.experimental.AUTOTUNE
def process_unlabeled_img(file_path):
img = tf.io.read_file(file_path)
img = tf.image.decode_jpeg(img, channels=3)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(images=img, size=(224, 224))
return file_path, img
Run Code Online (Sandbox Code Playgroud) python ×9
tensorflow ×5
keras ×4
pytorch ×2
android ×1
jax ×1
matplotlib ×1
numpy ×1
python-3.x ×1
scikit-learn ×1
tensor ×1