TensorFlow 模型建立与训练

tensorflow2.0 中如何获取模型中某一层的参数,同时把这个参数赋给另外一个相同的神经网络的相同层

请问:TypeError: Unexpected keyword argument passed to optimizer: learning_rate 怎么解决呀?
网上说要更新 keras,但是 TensorFlow 中的 keras 怎么更新呀?

@zjrwqdy 请提供具体代码和报错位置。
@zyk516 大部分时候是直接共享相同的层,可以参考本文:https://mp.weixin.qq.com/s/jN4kGT9VCF5ySxtvuqysRg 中关于变量重用的说明。
@asawanggaa 我没有定义过这种极其深层的模型,可以参考一下网上是否有 Keras 或者 PyTorch 的实现。如果它们对这些模型的定义也很 “臃肿 “,那大概用 TensorFlow 2 也差不多。
@slyrx 我估计是把这些图片直接跳过了,当然我没测试过,你可以自己验证一下。

D:\anaconda\python.exe C:/Users/Administrator/PycharmProjects/untitled/3.py
Traceback (most recent call last):
File “C:/Users/Administrator/PycharmProjects/untitled/3.py”, line 37, in
optimizer = tf.keras.optimizers.Adam (learning_rate=learning_rate)
File “D:\anaconda\lib\site-packages\tensorflow\python\keras\optimizers.py”, line 471, in init
super (Adam, self).init(**kwargs)
File “D:\anaconda\lib\site-packages\tensorflow\python\keras\optimizers.py”, line 68, in init
'passed to optimizer: ’ + str (k))
TypeError: Unexpected keyword argument passed to optimizer: learning_rate

Process finished with exit code 1

报错是这个样子的
代码是复制的你 MLP 的代码

请检查 TensorFlow 的版本是否为 2.0 及以上。

import tensorflow as tf
print (tf.__version__)

谢谢 之前好像是环境搞错了 不好意思啦 但是现在又遇到问题了 麻烦您再帮我看看。还是 MLP 的程序。
D:\anaconda\envs\tf2\python.exe C:/Users/Administrator/PycharmProjects/untitled/3.py
Traceback (most recent call last):
File “C:/Users/Administrator/PycharmProjects/untitled/3.py”, line 1, in
import tensorflow as tf
File “D:\anaconda\envs\tf2\lib\site-packages\tensorflow_init_.py”, line 101, in
from tensorflow_core import *
File “D:\anaconda\envs\tf2\lib\site-packages\tensorflow_core_init_.py”, line 40, in
from tensorflow.python.tools import module_util as _module_util
ModuleNotFoundError: No module named ‘tensorflow.python.tools’; ‘tensorflow.python’ is not a package

Process finished with exit code 1

你这个环境配置依然有问题,连 import TensorFlow as tf 都无法正常运行。请先参考一下环境配置的章节内容,检查自己的 tensorflow 是否正确安装。

我看了大部分 keras 模型的定义代码,基本上使用 subclassing API 的都很臃肿。
有一个使用工厂模式 +keras API 的比较简洁,不清楚这两种 API 定义的模型之间是否会有区别,尤其是要和其他技巧配合的时候(比如梯度累积、自定义 loss 和 metric)

我不知道这里的 “工厂模式” 具体指的是一个什么样的方式,能举个具体例子吗?

def _conv_bn_relu (**conv_params):
    filters = conv_params ["filters"]
    kernel_size = conv_params ["kernel_size"]
    strides = conv_params.setdefault ("strides", (1, 1))
    kernel_initializer = conv_params.setdefault ("kernel_initializer", "he_normal")
    padding = conv_params.setdefault ("padding", "same")
    kernel_regularizer = conv_params.setdefault ("kernel_regularizer", l2 (1.e-4))
    def f (input):
        conv = Conv2D (filters=filters, kernel_size=kernel_size,
                      strides=strides, padding=padding,
                      kernel_initializer=kernel_initializer,
                      kernel_regularizer=kernel_regularizer)(input)
        return _bn_relu (conv)
    return f

类似这样的,一层一层套函数,我实验下来貌似没有太大的区别

可能要看使用场景,以及 “简洁 / 臃肿” 的定义也比较主观。我认为需要高灵活性的模型比较适合 subclassing api。

dataset = tfds.load (“tf_flowers”, split=tfds.Split.TRAIN, as_supervised=True) 这个数据集无法直接在代码里面下载,问一下是否可以有其他方法下载,如果可以,把下载后的文件放到那个指定的目录啊?

请问一下,在 CNN 那一章节里,“使用 MobileNetV2 网络在 tf_flowers 五分类数据集上进行训练” 那段示例代码跑起来 loss 一直在 1.6 左右不下降是什么原因呢?

请问,如果只运行卷积那部分的代码,就会报错
Failed to get convolution algorithm. This is probably because cuDNN failed to initialize
但是如果先运行 MLP 那部分的代码,再运行卷积部分的,就可以运行,请问这是为什么呢

建议按照 https://tf.wiki/zh_hans/appendix/tfds.html 中的说明设置代理(对了目前貌似是直接设HTTPS_PROXY了,参考 https://github.com/tensorflow/datasets/blob/dd51a2d510bdcbf4498e9dcd2ee1ef33d44a13f3/tensorflow_datasets/core/download/downloader.py#L147 )。我目前没听说过有国内镜像,如果谁发现了也请告诉我。

@ifwant 经过调试发现是预训练模型本身的问题,可参考 https://zhuanlan.zhihu.com/p/64310188 。解决方案是为预训练模型的部分层手动开启训练模式,即加入

tf.keras.backend.set_learning_phase (True)

或者在调用模型的时候加入 training=True 参数,即

labels_pred = model (images, training=True)

我在写这段示例代码的时候没遇到这样的问题,可能是年代久远了。

@LiuPineapple 可能是环境配置的问题,请换个电脑或者在云端运行试试看。

博主您好,在实现 MNIST 数据集的时候,这里将三维数据转为思维数据的时候,还有一个 /255.0 的操作,在后面您说 MNIST 数据集是灰度图像,既然是灰度,每个像素的值要么是 0,要么是 1,为什么要除以 255.0 呢?此外,除以 255.0 之后,每个像素值转化为【0,1】之间的数了,这么做是为了类似归一化操作吗?

不一样的。前面是矩阵相乘,后面你写的是矩阵中对应位置的元素相乘。

“灰度图像” 与 “黑白图像” 还是有区别的,前者的取值一般在 0-255 之间(即 8 位灰度图像。纯白为 255,纯黑为 0)。

我在运行 RNN 生成文本时出现下面的错误,有大佬可以指正么?谢谢!
TypeError: Expected int32 passed to parameter ‘size’ of op ‘Slice’, got [0.8] of type ‘list’ instead. Error: Expected int32, got 0.8 of type ‘float’ instead.