在以下函数中,管理器将发出finished(QNetworkReply*)信号,然后getCategories(QNetworkReply*)将调用插槽函数.
void getCategories()
{
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(getCategories(QNetworkReply*)));
for(int i = 0; i < stores.size(); ++i)
{
request.setUrl(QUrl(QString("http://www.example.com/%1").arg(stores[i].store_id)));
manager.get(request);
}
}
Run Code Online (Sandbox Code Playgroud)
如果在第一次调用slot函数时发出第二个信号,Qt是否会启动另一个线程来运行slot函数作为对第二个信号的响应?如果是这样,是否有一些方法让第二次调用slot函数等到第一次调用结束?
更新:
我的意思是插槽功能有可能同时运行吗?
我很难找到将多个输入传递给模型的正确方法。该模型有2个输入
(256, 256, 3) (256, 256, 3)和1个输出
(256, 256, 3)我正在通过生成图像ImageDataGenerator:
x_data_gen = ImageDataGenerator(
horizontal_flip=True,
validation_split=0.2)
Run Code Online (Sandbox Code Playgroud)
我正在通过python生成器生成示例:
def image_sampler(datagen, batch_size, subset="training"):
for imgs in datagen.flow_from_directory('data/r_cropped', batch_size=batch_size, class_mode=None, seed=1, subset=subset):
g_y = []
noises = []
bw_images = []
for i in imgs:
# append to expected output the original image
g_y.append(i/255.0)
noises.append(generate_noise(1, 256, 3)[0])
bw_images.append(iu_rgb2gray(i))
yield(np.array([noises, bw_images]), np.array(g_y))
Run Code Online (Sandbox Code Playgroud)
尝试使用以下方法训练模型时:
generator.fit_generator(
image_sampler(x_data_gen, 32),
validation_data=image_sampler(x_data_gen,32,"validation"),
epochs=EPOCHS,
steps_per_epoch= 540,
validation_steps=160 )
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
检查模型输入时出错:传递给模型的Numpy数组列表不是模型预期的大小。预计会看到2个数组,但获得了以下1个数组的列表
虽然消息很清楚,但我不知道如何解决生成过程来解决它。
我试过了:
yield([noises, bw_images], …Run Code Online (Sandbox Code Playgroud) 我的任务是根据缺陷对种子进行分类。我有 7 个类的大约 14k 图像(它们的大小不相等,有些类有更多照片,有些类有更少)。我尝试从头开始训练 Inception V3,准确率约为 90%。然后我尝试使用带有 ImageNet 权重的预训练模型进行迁移学习。我inception_v3从applications没有顶级 fc 层的情况下导入,然后在文档中添加了我自己的层。我以以下代码结束:
# Setting dimensions
img_width = 454
img_height = 227
###########################
# PART 1 - Creating Model #
###########################
# Creating InceptionV3 model without Fully-Connected layers
base_model = InceptionV3(weights='imagenet', include_top=False, input_shape = (img_height, img_width, 3))
# Adding layers which will be fine-tunned
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024, activation='relu')(x)
predictions = Dense(7, activation='softmax')(x)
# Creating final model
model = Model(inputs=base_model.input, outputs=predictions)
# …Run Code Online (Sandbox Code Playgroud) 我试图通过调用predict_proba()Keras 模型来生成班级分数,但似乎这个函数不存在!它是否已被弃用,因为我在 Google 中看到了一些示例?我正在使用 Keras 2.2.2。
我实现以下代码。它在以前版本的 Keras 中成功运行:
max_sequence = 56
input_dim = 26
print("Build model..1")
first_input = Input(shape=(max_sequence,input_dim))
first_lstm = LSTM(5, return_sequences=True)(first_input)
first_bn = BatchNormalization()(first_lstm)
first_activation = Activation('tanh')(first_bn)
first_flat = Flatten()(first_activation)
print("Build model..2")
second_input = Input(shape=(max_sequence,input_dim))
second_lstm = LSTM(5, return_sequences=True)(second_input)
second_bn = BatchNormalization()(second_lstm)
second_activation = Activation('tanh')(second_bn)
second_flat = Flatten()(second_activation)
merge=concatenate([first_flat, second_flat])
merge_dense=Dense(3)(merge)
merge_bn = BatchNormalization()(merge_dense)
merge_activation = Activation('tanh')(merge_bn)
merge_dense2=Dense(1)(merge_activation)
merge_activation2 = Activation('tanh')(merge_dense2)
train_x_1 = np.reshape(np.array(train_x_1), [2999, 56, 26])
train_x_2 = np.reshape(np.array(train_x_2), [2999, 56, 26])
model=Model(inputs=[train_x_1,train_x_2], outputs=train_y_class)
optimizer = RMSprop(lr=0.5)
model.compile(optimizer=optimizer, loss='binary_crossentropy', metrics=['accuracy'])
history = …Run Code Online (Sandbox Code Playgroud) 我想要实现的是计算交叉熵相对于输入值的梯度x。在 TensorFlow 中我没有遇到任何问题:
ce_grad = tf.gradients(cross_entropy, x)
Run Code Online (Sandbox Code Playgroud)
但随着我的网络变得越来越大,我改用 Keras 来更快地构建它们。但是,现在我真的不知道如何实现上述目标?有没有办法从model存储整个模型的变量中提取交叉熵和输入张量?
为了清楚起见,我的cross_entropy是:
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels = y_, logits=y_conv))
<tf.Tensor 'Mean:0' shape=() dtype=float32>
Run Code Online (Sandbox Code Playgroud)
和x:
x = tf.placeholder(tf.float32, shape = [None,784])
<tf.Tensor 'Placeholder:0' shape=(?, 784) dtype=float32>
Run Code Online (Sandbox Code Playgroud) 我想创建一个网络,其中输入层中的节点仅连接到下一层中的某些节点。这是一个小例子:
到目前为止,我的解决方案是将i1和之间的边的权重设置h1为零,并且在每个优化步骤之后,我将权重乘以一个矩阵(我称之为矩阵掩码矩阵),其中每个条目都是 1,除了权重的条目之间的边缘i1和h1。(见下面的代码)
这种做法对吗?或者这对 GradientDescent 有影响吗?有没有另一种方法可以在 TensorFlow 中创建这种网络?
import tensorflow as tf
import tensorflow.contrib.eager as tfe
import numpy as np
tf.enable_eager_execution()
model = tf.keras.Sequential([
tf.keras.layers.Dense(2, activation=tf.sigmoid, input_shape=(2,)), # input shape required
tf.keras.layers.Dense(2, activation=tf.sigmoid)
])
#set the weights
weights=[np.array([[0, 0.25],[0.2,0.3]]),np.array([0.35,0.35]),np.array([[0.4,0.5],[0.45, 0.55]]),np.array([0.6,0.6])]
model.set_weights(weights)
model.get_weights()
features = tf.convert_to_tensor([[0.05,0.10 ]])
labels = tf.convert_to_tensor([[0.01,0.99 ]])
mask =np.array([[0, 1],[1,1]])
#define the loss function
def loss(model, x, y):
y_ = model(x)
return tf.losses.mean_squared_error(labels=y, predictions=y_)
#define the gradient calculation
def …Run Code Online (Sandbox Code Playgroud) 为了对图像进行分类,我们使用具有几个卷积层和几个全连接层的神经网络。
元数据包含一些有助于对图像进行分类的数字信息。有没有一种简单的方法可以将数字元数据与卷积的输出一起输入到第一个全连接层?是否可以使用 TensorFlow 或更好的 Keras 来实现这一点?
当我运行windeployqt部署应用程序时,收到以下警告:
Warning: Cannot find GCC installation directory. g++.exe must be in the path.
Run Code Online (Sandbox Code Playgroud)
即使我已将Path环境变量设置为包含位于C:\Qt\Qt5.12.0\5.12.0\mingw73_64\bin. 结果,我可以看到编译器运行时库不包含在部署的包中,即使我显式使用--compiler-runtime标志也是如此。我不确定我错过了哪一步?
我以不等形状数组列表的形式标记数据:
array([array([1179, 6, 208, 2, 1625, 92, 9, 3870, 3, 2136, 435,
5, 2453, 2180, 44, 1, 226, 166, 3, 4409, 49, 6728,
...
10, 17, 1396, 106, 8002, 7968, 111, 33, 1130, 60, 181,
7988, 7974, 7970])], dtype=object)
Run Code Online (Sandbox Code Playgroud)
以及各自的目标:
Out[74]: array([0, 0, 0, ..., 0, 0, 1], dtype=object)
Run Code Online (Sandbox Code Playgroud)
我正在尝试将它们转换为 padded tf.data.Dataset(),但它不允许我将不相等的形状转换为张量。我会得到这个错误:
ValueError: Can't convert non-rectangular Python sequence to Tensor.
Run Code Online (Sandbox Code Playgroud)
完整的代码在这里。假设我的起点是在之后y = ...:
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import tensorflow as tf
import tensorflow_datasets as tfds …Run Code Online (Sandbox Code Playgroud) keras ×8
python ×8
tensorflow ×6
qt ×2
c++ ×1
deployment ×1
g++ ×1
lstm ×1
mingw ×1
numpy ×1
probability ×1
qt-signals ×1
qtcore ×1
qtnetwork ×1
windeployqt ×1