我有关于(不支持 TensorFlow 2.0 的 Keras。我们建议使用tf.keras,或者降级到 TensorFlow 1.14。)任何建议的错误。
谢谢
import keras
#For building the Neural Network layer by layer
from keras.models import Sequential
#To randomly initialize the weights to small numbers close to 0(But not 0)
from keras.layers import Dense
classifier=tf.keras.Sequential()
classifier.add(Dense(output_dim = 6, init = 'uniform', activation = 'relu', input_dim = 11))
RuntimeError: It looks like you are trying to use a version of multi-backend Keras that does not support TensorFlow 2.0. We recommend using `tf.keras`, or alternatively, …Run Code Online (Sandbox Code Playgroud) tf.data 有一个from_generator初始值设定项,它似乎不可扩展。来自官方指南
注意:虽然这是一种方便的方法,但它的可移植性和可扩展性有限。它必须在创建生成器的同一个 python 进程中运行,并且仍然受 Python GIL 的约束。
https://www.tensorflow.org/guide/data#sumption_python_generators
并在官方文档中
注意:Dataset.from_generator() 的当前实现使用 tf.numpy_function 并继承相同的约束。特别是,它需要将与 Dataset 和 Iterator 相关的操作放置在与调用 Dataset.from_generator() 的 Python 程序相同的进程中的设备上。生成器的主体不会在 GraphDef 中序列化,如果您需要序列化模型并在不同的环境中恢复它,则不应使用此方法。
注意:如果生成器依赖于可变全局变量或其他外部状态,请注意运行时可能会多次调用生成器(以支持重复数据集)以及在调用 Dataset.from_generator() 和产生生成器的第一个元素。改变全局变量或外部状态可能会导致未定义的行为,我们建议您在调用 Dataset.from_generator() 之前在生成器中显式缓存任何外部状态。
https://www.tensorflow.org/api_docs/python/tf/data/Dataset#from_generator
然而,生成器是训练非常大量数据的一种相当常见的方法。所以必须有一些替代的最佳实践,但官方的 Tensorflow 数据指南没有提供任何信息。
我正在尝试查看可以枚举但不能索引的对象中的一些数据。我对 python 还是新手,但我不明白这是怎么可能的。
如果可以枚举它,为什么不能通过与枚举相同的方式访问索引?如果没有,有没有办法单独访问这些项目?
import tensorflow_datasets as tfds
train_validation_split = tfds.Split.TRAIN.subsplit([6, 4])
(train_data, validation_data), test_data = tfds.load(
name="imdb_reviews",
split=(train_validation_split, tfds.Split.TEST),
as_supervised=True)
Run Code Online (Sandbox Code Playgroud)
选择数据集的一个子集
foo = train_data.take(5)
Run Code Online (Sandbox Code Playgroud)
我可以foo用 enumerate迭代:
[In] for i, x in enumerate(foo):
print(i)
Run Code Online (Sandbox Code Playgroud)
产生预期的输出:
0
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试对其进行索引时,出现foo[0]此错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-44-2acbea6d9862> in <module>
----> 1 foo[0]
TypeError: 'TakeDataset' object does not support indexing
Run Code Online (Sandbox Code Playgroud) 在 TensorFlow 1.X 中,您可以使用占位符动态更改批次大小。例如
dataset.batch(batch_size=tf.placeholder())
查看完整示例
你如何在 TensorFlow 2.0 中做到这一点?
我已经尝试了以下但它不起作用。
import numpy as np
import tensorflow as tf
def new_gen_function():
for i in range(100):
yield np.ones(2).astype(np.float32)
batch_size = tf.Variable(5, trainable=False, dtype=tf.int64)
train_ds = tf.data.Dataset.from_generator(new_gen_function, output_types=(tf.float32)).batch(
batch_size=batch_size)
for data in train_ds:
print(data.shape[0])
batch_size.assign(10)
print(batch_size)
Run Code Online (Sandbox Code Playgroud)
输出
5
<tf.Variable 'Variable:0' shape=() dtype=int64, numpy=10>
5
<tf.Variable 'Variable:0' shape=() dtype=int64, numpy=10>
5
<tf.Variable 'Variable:0' shape=() dtype=int64, numpy=10>
5
...
...
Run Code Online (Sandbox Code Playgroud)
我正在使用 Gradient 磁带使用自定义训练循环训练模型。我怎样才能做到这一点?
嗨,我有一个我在 android 应用程序中使用的自定义模型,但是当我尝试运行它时,会抛出 MLkitExceptions,所述错误的日志输出如下:
Internal error has occurred when executing Firebase ML tasks
Run Code Online (Sandbox Code Playgroud)
我的应用程序的 Java 代码如下所示:
Internal error has occurred when executing Firebase ML tasks
Run Code Online (Sandbox Code Playgroud)
每当我尝试运行 FirebaseModelInterpreter 时,我都会收到该错误,而没有其他任何错误。
输入张量和输出张量的形状分别如下:
[1 3]
<class 'numpy.float32'>
[ 1 1 34]
<class 'numpy.int64'>
Run Code Online (Sandbox Code Playgroud)
任何有关此问题的帮助或见解将不胜感激。
我正在尝试使用 MNIST 数据集训练深度神经网络。
BATCH_SIZE = 100
train_data = train_data.batch(BATCH_SIZE)
validation_data = validation_data.batch(num_validation_samples)
test_data = scaled_test_data.batch(num_test_samples)
validation_inputs, validation_targets = next(iter(validation_data))
input_size = 784
output_size = 10
hidden_layer_size = 50
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(28,28,1)),
tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
tf.keras.layers.Dense(hidden_layer_size, activation='relu'),
tf.keras.layers.Dense(output_size, activation='softmax')
])
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
NUM_EPOCHS = 5
model.fit(train_data, epochs=NUM_EPOCHS, validation_data=(validation_inputs,validation_targets))
Run Code Online (Sandbox Code Playgroud)
model.fit 抛出以下错误
-------------------------------------------------------------------------
--
ValueError Traceback (most recent call last)
<ipython-input-58-c083185dafc6> in <module>
1 NUM_EPOCHS = 5
----> 2 model.fit(train_data, epochs=NUM_EPOCHS, validation_data=(validation_inputs,validation_targets))
~/anaconda3/envs/py3-TF2/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, …Run Code Online (Sandbox Code Playgroud) 当 x 是tf.data数据集时,(inputs, targets)和 输入的元组是诸如{"fea_1": val_1, "fea_2": val_2…}、model.fit函数tensorflow/python/keras/engine/training.py不支持validation_data或 之类的特征的字典validation_split。
validation_split当 x 是数据集时不支持。validation_data仅支持 Numpy 数组或张量。
我可以takeor splitdataset to model.fitand model.evaluate,但它不能在每个纪元结束时执行验证。
tf.data.dataset当输入特征是字典时,有没有更好的方法来训练和评估?
我正在尝试实现一个非常简单的 keras 模型,该模型使用来自另一个模型的知识蒸馏 [1]。粗略地说,我需要更换原来的损失L(y_true, y_pred)由L(y_true, y_pred)+L(y_teacher_pred, y_pred)哪里y_teacher_pred是另一个模型的预测。
我试过做
def create_student_model_with_distillation(teacher_model):
inp = tf.keras.layers.Input(shape=(21,))
model = tf.keras.models.Sequential()
model.add(inp)
model.add(...)
model.add(tf.keras.layers.Dense(units=1))
teacher_pred = teacher_model(inp)
def my_loss(y_true,y_pred):
loss = tf.keras.losses.mean_squared_error(y_true, y_pred)
loss += tf.keras.losses.mean_squared_error(teacher_pred, y_pred)
return loss
model.compile(loss=my_loss, optimizer='adam')
return model
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试调用fit我的模型时,我得到了
TypeError: An op outside of the function building code is being passed
a "Graph" tensor. It is possible to have Graph tensors
leak out of the function building context by including a
tf.init_scope …Run Code Online (Sandbox Code Playgroud) 我有两个模型,Tensorflow 2.0 中的模型 A 和 Pytorch 1.3 中的模型 B。模型 A 的输出是 B 的输入。我想端到端地训练这两个模型。
是否可以不将其中一个模型移植到另一个框架?
machine-learning deep-learning tensorflow pytorch tensorflow2.0
structured_input_signature在检查tf.ConcreteFunction.
在谷歌文档https://www.tensorflow.org/guide/concrete_function#using_a_concrete_function中返回一个元组。例如
@tf.function
def power(a,b):
print('Tracing "power"\n')
return a**b
float_power = power.get_concrete_function(
a = tf.TensorSpec(shape=[], dtype=tf.float32),
b = tf.TensorSpec(shape=[], dtype=tf.float32))
print(float_power.structured_input_signature)
print(float_power.structured_outputs)
Run Code Online (Sandbox Code Playgroud)
印刷
Tracing "power"
((TensorSpec(shape=(), dtype=tf.float32, name='a'), TensorSpec(shape=(), dtype=tf.float32, name='b')), {})
Tensor("Identity:0", shape=(), dtype=float32)
Run Code Online (Sandbox Code Playgroud)
然而,当模块被保存和加载时,输出略有不同:
float_power_mod = tf.Module()
float_power_mod.float_power = float_power
tf.saved_model.save(float_power_mod, './float_power_mod')
mod_4 = tf.saved_model.load('./float_power_mod')
float_power_func = mod_4.signatures['serving_default']
print(float_power_func.structured_input_signature)
Run Code Online (Sandbox Code Playgroud)
印刷
((),
{'a': TensorSpec(shape=(), dtype=tf.float32, name='a'),
'b': TensorSpec(shape=(), dtype=tf.float32, name='b')})
Run Code Online (Sandbox Code Playgroud)
在 Structured_input_signature 的返回元组中填充元组与字典背后的逻辑是什么?