折腾了一早上,终于可以在jupyternotebook中运行了。感觉错误都被我遇见了
我有两个python 一个是3.7,一个是3.9
在pycharm中使用的是d盘的 3.9
在jupyternotebook中使用的是c盘的3.7
默认安装我是安装在了d盘中
所以导致我安装了tensorflow但在jupyternotebook中确不能用。
需要进入我c盘的pip.exe 输入cmd进入终端
C:\Users\10945\AppData\Roaming\Python\Python37\site-packages\pip>pip install ×××
便可以在特定的python中安装。
见此博客!!
见此博客!!
见此博客!!
错误代码:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\Scripts\jupyter-notebook-script.py", line 6, in <module>
from notebook.notebookapp import main
File "C:\ProgramData\Anaconda3\lib\site-packages\notebook\notebookapp.py", line 40, in <module>
from jinja2 import Environment, FileSystemLoader
File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2\__init__.py", line 33, in <module>
from jinja2.environment import Environment, Template
File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2\environment.py", line 15, in <module>
from jinja2 import nodes
File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2\nodes.py", line 19, in <module>
from jinja2.utils import Markup
File "C:\ProgramData\Anaconda3\lib\site-packages\jinja2\utils.py", line 647, in <module>
from markupsafe import Markup, escape, soft_unicode
ImportError: cannot import name 'soft_unicode' from 'markupsafe' (C:\ProgramData\Anaconda3\lib\site-packages\markupsafe\__init__.py)
解决:
python -m pip uninstall markupsafe==2.0.1
见此博客!!!
def initialize_parameters():
"""
初始化神经网络的参数,参数的维度如下:
W1 : [25, 12288]
b1 : [25, 1]
W2 : [12, 25]
b2 : [12, 1]
W3 : [6, 12]
b3 : [6, 1]
返回:
parameters - 包含了W和b的字典
"""
# tf.compat.v1.set_random_seed(1) #指定随机种子
initializerw=tf.initializers.GlorotUniform(seed=1)
initializerb=tf.zeros_initializer()
W1 = tf.compat.v1.get_variable("W1",[25,12288],initializer=initializerw)
b1 = tf.compat.v1.get_variable("b1",[25,1],initializer=tf.zeros_initializer())
W2 = tf.compat.v1.get_variable("W2", [12, 25], initializer = initializerw)
b2 = tf.compat.v1.get_variable("b2", [12, 1], initializer = tf.zeros_initializer())
W3 = tf.compat.v1.get_variable("W3", [6, 12], initializer = initializerw)
b3 = tf.compat.v1.get_variable("b3", [6, 1], initializer = tf.zeros_initializer())
parameters = {"W1": W1,
"b1": b1,
"W2": W2,
"b2": b2,
"W3": W3,
"b3": b3}
return parameters
tf.compat.v1.reset_default_graph() #用于清除默认图形堆栈并重置全局默认图形。
parameters = initialize_parameters()
print("W1 = " + str(parameters["W1"]))
print("b1 = " + str(parameters["b1"]))
print("W2 = " + str(parameters["W2"]))
print("b2 = " + str(parameters["b2"]))
注意!!!这个函数的返回值并不是一个数,而是一个向量。
如果要求交叉熵,我们要再做一步tf.reduce_sum操作,就是对向量里面所有元素求和,最后才得到。
如果求loss,则要做一步tf.reduce_mean操作,对向量求均值!
def compute_cost(Z3,Y):
"""
计算成本
参数:
Z3 - 前向传播的结果
Y - 标签,一个占位符,和Z3的维度相同
返回:
cost - 成本值
"""
logits = tf.transpose(Z3) #转置
labels = tf.transpose(Y) #转置
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits,labels=labels))
return cost
所以向前传播中只用求到Z3,Z3作为成本函数的输入。
并且在向前传播中我们无需保存W,b,Z这些,向后传播和计算成本时会根据向前传播的步骤自动推算出梯度。