我想包装一个如下所示的异步API:
[someObject completeTaskWithCompletionHandler:^(NSString *result) {
}];
Run Code Online (Sandbox Code Playgroud)
进入一个我可以像这样调用的同步方法
NSString *result = [someObject completeTaskSynchronously];
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我做了一些文档阅读和谷歌搜索,并尝试使用"dispatch_semaphore"尝试实现它,如下所示:
-(NSString *) completeTaskSynchronously {
__block NSString *returnResult;
self.semaphore = dispatch_semaphore_create(0);
[self completeTaskWithCompletionHandler:^(NSString *result) {
resultResult = result;
dispatch_semaphore_signal(self.semaphore);
}];
dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER);
return resultResult;
}
Run Code Online (Sandbox Code Playgroud)
但这似乎没有用,它基本上只是停在dispatch_semaphore_wait.执行永远不会到达执行_signal的内部块.任何人都有关于如何做到这一点的代码示例?我怀疑该块必须在主线程的其他线程上?此外,假设我无法访问异步方法背后的源代码.谢谢!
multithreading asynchronous objective-c grand-central-dispatch ios
我的目标是尝试像脚本一样运行我的Swift程序.如果整个程序是自包含的,你可以运行它:
% xcrun swift hello.swift
Run Code Online (Sandbox Code Playgroud)
hello.swift在哪里
import Cocoa
println("hello")
Run Code Online (Sandbox Code Playgroud)
但是,我想超越一步,包括swift模块,我可以导入其他类,函数等.
所以我们假设我们想要在GoodClass.swift中使用一个非常好的类
public class GoodClass {
public init() {}
public func sayHello() {
println("hello")
}
}
Run Code Online (Sandbox Code Playgroud)
我现在想把这个好东西导入我的hello.swift:
import Cocoa
import GoodClass
let myGoodClass = GoodClass()
myGoodClass.sayHello()
Run Code Online (Sandbox Code Playgroud)
我首先通过运行以下命令生成.o,lib <>.a,.swiftmodule:
% xcrun swiftc -emit-library -emit-object GoodClass.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name GoodClass
% ar rcs libGoodClass.a GoodClass.o
% xcrun swiftc -emit-module GoodClass.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name GoodClass
Run Code Online (Sandbox Code Playgroud)
最后,我准备运行我的hello.swift(好像它是一个脚本):
% xcrun swift -I "./" -L "./" -lGoodClass -sdk $(xcrun --show-sdk-path --sdk …Run Code Online (Sandbox Code Playgroud) SQLAlchemy (0.9.8) 和 mysql-5.6.21-osx10.8-x86_64 和 MAC OS X 10.3.3 (Yosemite)
我一直断断续续:
InterfaceError: (InterfaceError) 2013: Lost connection to MySQL server during query u'SELECT..... '
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些线程,大多数情况通过将其添加到 my.cnf 来解决
max_allowed_packet = 1024M
Run Code Online (Sandbox Code Playgroud)
这对于我尝试做的事情来说应该足够大了。这样做后,我间歇性地踩它。并将这一行放在 /etc/my.cnf 中:
log-error = "/Users/<myname>/tmp/mysql.err.log"
log-warnings = 3
Run Code Online (Sandbox Code Playgroud)
我希望获得更多详细信息,但我所看到的只是这样的:
[Warning] Aborted connection 444 to db: 'dbname' user: 'root' host: 'localhost' (Got an error reading communication packets)
Run Code Online (Sandbox Code Playgroud)
我已经到了我认为更多细节更好的日志记录可能会有所帮助的地步,或者如果在此之前我可以尝试其他一些事情。
谢谢。
在执行任何单元格时收到一个浏览器白色弹出窗口:
Error
Could not load the JavaScript files needed to display output.
This is probably because your Google account login access has expired or because third-party cookies are not allowed by your browser.
Please reload this page.
DETAILS
Run Code Online (Sandbox Code Playgroud)
我试过重新登录并重新启动运行时,但没有帮助。奇怪的是,另一个笔记本是好的。
更新:只需重新启动浏览器并重新启动一切似乎都可以“解决”这个问题。
我前段时间创建了一个 GCP AI Platform Notebook 实例,对于我尝试安装的许多扩展,版本似乎太低了。我做了一个pip install upgrade jupyterlab并重新启动了虚拟机实例。当我点击 时OPEN JUPYTERLAB,我发现更新没有生效。
这样做的正确方法是什么?
如果我完成了在 google colab 上创建的 jupyter 笔记本,并且该笔记本已通过 GPU 连接到其中一个环境,我该如何关闭并停止它?在本地,我过去常常通过单击“文件”>“关闭并暂停”来执行此操作。我只是想考虑使用这个伟大而免费的计算资源。
这是我收到的警告:
WARNING:tensorflow:multiprocessing can interact badly with TensorFlow, causing nondeterministic deadlocks. For high performance data pipelines tf.data is recommended.
Run Code Online (Sandbox Code Playgroud)
我写的 Sequence 子类严格执行加载和读取 I/O jpg 文件。我想只要没有 2 个线程在同一个文件上同时执行,事情应该没问题。
我训练了几个 epoch,到目前为止,没有错误。但是如果有可能发生的潜在不好的事情,我想获得反馈。
使用 iPad Pro 2020 和 google chrome 应用程序(使用桌面网站),Colab 笔记本的每个单元格上都有一个又大又胖的键盘图标。如何摆脱它?我有一个 iPad 的硬件键盘,绝对不需要那个图标,它浪费了宝贵的空间。看截图
\n\n\ngoogle-chrome ipad google-chrome-app google-colaboratory ipados
这是 tf 2.3.0。在训练期间, SparseCategoricalCrossentropy loss 和 sparse_categorical_accuracy 的报告值似乎还差得很远。我查看了我的代码,但还没有发现任何错误。这是要重现的代码:
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
x = np.random.randint(0, 255, size=(64, 224, 224, 3)).astype('float32')
y = np.random.randint(0, 3, (64, 1)).astype('int32')
ds = tf.data.Dataset.from_tensor_slices((x, y)).batch(32)
def create_model():
input_layer = tf.keras.layers.Input(shape=(224, 224, 3), name='img_input')
x = tf.keras.layers.experimental.preprocessing.Rescaling(1./255, name='rescale_1_over_255')(input_layer)
base_model = tf.keras.applications.ResNet50(input_tensor=x, weights='imagenet', include_top=False)
x = tf.keras.layers.GlobalAveragePooling2D(name='global_avg_pool_2d')(base_model.output)
output = Dense(3, activation='softmax', name='predictions')(x)
return tf.keras.models.Model(inputs=input_layer, outputs=output)
model = create_model()
model.compile(
optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),
loss=tf.keras.losses.SparseCategoricalCrossentropy(),
metrics=['sparse_categorical_accuracy']
)
model.fit(ds, steps_per_epoch=2, …Run Code Online (Sandbox Code Playgroud) 我在 Swift for Tensorflow 的开发峰会上看到了一些不错的演示。所以想试试这个。
我可以打开这个笔记本:
https://github.com/tensorflow/swift/blob/master/docs/site/tutorials/custom_differentiation.ipynb
如果您查看 nb 运行时设置,运行时类型下拉列表会显示“ Swift ”。
但是,我无法在 colab 菜单中的任何地方找到如何从头开始快速创建笔记本。
ModelCheckpoint 可用于保存基于特定监控指标的最佳模型。因此,它显然具有有关存储在其对象中的最佳指标的信息。例如,如果您在 google colab 上训练,您的实例可能会在没有警告的情况下被杀死,并且在长时间的训练后您将丢失此信息。
我试图腌制 ModelCheckpoint 对象,但得到:
TypeError: can't pickle _thread.lock objects
Run Code Online (Sandbox Code Playgroud)
这样当我带回我的笔记本时,我可以重复使用这个相同的对象。有没有好的方法可以做到这一点?您可以尝试通过以下方式重现:
chkpt_cb = tf.keras.callbacks.ModelCheckpoint('model.{epoch:02d}-{val_loss:.4f}.h5',
monitor='val_loss',
verbose=1,
save_best_only=True)
with open('chkpt_cb.pickle', 'w') as f:
pickle.dump(chkpt_cb, f, protocol=pickle.HIGHEST_PROTOCOL)
Run Code Online (Sandbox Code Playgroud) 我将 sample_weight 作为 tf.data.Dataset 中的第三个元组传递(在掩码的上下文中使用它,所以我的 sample_weight 要么是 0,要么是 1。问题是这个 sample_weight 似乎没有应用于度量计算.(参考:https : //www.tensorflow.org/guide/keras/train_and_evaluate#sample_weights)
这是代码片段:
train_ds = tf.data.Dataset.from_tensor_slices((imgs, labels, masks))
train_ds = train_ds.shuffle(1024).repeat().batch(32).prefetch(buffer_size=AUTO)
model.compile(optimizer = Adam(learning_rate=1e-4),
loss = SparseCategoricalCrossentropy(),
metrics = ['sparse_categorical_accuracy'])
model.fit(train_ds, steps_per_epoch = len(imgs)//32, epochs = 20)
Run Code Online (Sandbox Code Playgroud)
训练后的损失非常接近于零,但 sparse_categorical_accuracy 不是(大约 0.89)。因此,我高度怀疑为构建 tf.dataset 传入的任何 sample_weight(掩码)都不会在训练期间报告指标时应用,而损失似乎是正确的。我通过对未单独屏蔽的子集运行预测进一步确认,并确认准确度为 1.0
另外,根据文档:
https://www.tensorflow.org/api_docs/python/tf/keras/metrics/SparseCategoricalAccuracy
该指标有 3 个参数:y_true、y_pred、sample_weight
那么如何在度量计算期间传递 sample_weight 呢?这是 keras 框架内 model.fit(...) 的责任吗?到目前为止,我找不到任何谷歌搜索的例子。
tensorflow ×4
keras ×3
python ×2
swift ×2
tf.keras ×2
asynchronous ×1
callback ×1
ios ×1
ipad ×1
ipados ×1
jupyter-lab ×1
macos ×1
metrics ×1
module ×1
mysql ×1
objective-c ×1
pickle ×1
sqlalchemy ×1
xcrun ×1