Home

实验笔记

字数统计: 1.3k阅读时长: 4 min
2019/10/22 Share

自然语言处理

tensorflow相关

 验证tensorflow能否工作的时候调用

1
2
3
4
5
import tensorflow as tf
sess = tf.Session()
a = tf.constant(10)
b = tf.constant(12)
sess.run(a+b)

其中对第二行命令,报错AttributeError: module ‘tensorflow’ has no attribute ‘Session’
上网查询,发现原因是这个命令属于低版本的tensorflow,想正常使用的话,应该把import tensorflow as tf注释掉,然后换成

1
2
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

Pycharm中报错,
在开头加上

1
2
3
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
import tensorflow as tf

tensorflow-gpu

 我真的很想骂人了。

1
2
from tensorflow_core.python.client import device_lib
print(device_lib.list_local_devices())

查看当前可用GPU设备。
第一开始nvidia-smi指令报错,我真的爆哭。钟哥“冷嘲热讽”地点醒我ge-experience没装等等,让我重新装了之后能够正常使用。他真是个态度差的好男人。


1
2
3
from bert import modeling
from bert import optimization
from bert import tokenization

报错,后来发现自己应该pip install bert-tensorflow并且在pycharm中安装这个bert的package

tensor-flow代码升级

 国际惯例,问候老师。
 由于github上的代码基本都是基于tensorflow-1.x版本的,而我最近安装的TF是2.0.0,折腾得筋疲力尽真的不能再让我去降级捯饬这儿玩意儿了。
 Luckily,查阅Tensorflow中发现其中有一条The easiest way to automatically apply these renames is to use the v2 upgrade script.

 但是实践下来发现还有不少错误。第一开始如果直接在powershell中输入命令
tf_upgrade_v2 --infile [文件名].py --outfile [升级后文件名].py
会有DLL错误,回忆之前检测tensorflow-gpu版本检测错误过程当中出现的同样错误,发现是由于自己没有激活tensorflow,
于是先:
activate tensorflow-gpu再使用升级指令。

计网笔记

lab1

 在计网实验中遇到了些小问题,记录下来。

StartProxy Exception

 原因是利用Java开启一个进程后再开启相同进程会抛出这个异常,其中eclipse会提示

Address already in use: NET_Bind

 于是上网查询,发现原因是开启服务器后尽管关闭了eclipse,进程仍然没有被终结。解决办法:

  • netstat -p tcp -ano 查看端口被哪个进程占用
  • taskkill -PID [进程ID] -F 强制终止进程

 成功解决。

代理服务器无响应???

 我捯饬了一晚上也不知为啥,试了网上能搜到的代码还是出现相同的情况,但是细(cu)心(xin)的我发现HTTP默认端口为80,可是根据java程序里面的函数反馈信息,发现:

443

443? 于是百度一下,443端口对应的是Https协议,

网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP。

 所以我弄的还是不行喽?再找一份能够实现https代理服务器的代码去。
 目前来说主要问题是http代理服务器无法访问得了https协议的网站,4399和哈工大门户网站除外,作为一个懒汉我只能再研究研究参考样例里面的c++语言了

_beginthread()和_beginthreadex

1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned long _beginthread(
void(_cdecl *start_address)(void *), //声明为void (*start_address)(void *)形式
unsigned stack_size, //是线程堆栈大小,一般默认为0
void *arglist //向线程传递的参数,一般为结构体
);

unsigned long _beginthreadex( //推荐使用
void *security, //安全属性,NULL表示默认安全性
unsigned stack_size, //是线程堆栈大小,一般默认为0
unsigned(_stdcall *start_address)(void *), //声明为unsigned(*start_address)(void *)形式
void *argilist, //向线程传递的参数,一般为结构体
unsigned initflag, //新线程的初始状态,0表示立即执行,CREATE_SUSPEND表示创建后挂起。
unsigned *thrdaddr //该变量存放线程标识符,它是CreateThread函数中的线程ID。
); //创建成功条件下的将线程句柄转化为unsigned long型返回,创建失败条件下返回0

 线程结束

1
2
3
4
5
//释放线程空间、释放线程TLS空间、调用ExiteThread结束线程。
void _endthread(void);
// retval:设定的线程结束码,与ExiteThread函数的参数功能一样,
//其实这个函数释放线程TLS空间,再调用ExiteThread函数,但没有释放线程空间。
void _endthreadex(unsigned retval);

goto 跳过了***的初始化操作

 把这个变量放在前面就好了。

“无法查找或打开PDB文件”

pdb
参考网址VS“无法查找或打开PDB文件”
 如果还出现无法查找或打开 PDB 文件,原因: 因为符号的加载项没有在你运行项目的那个目录。将缓存符号的目录改为项目运行下的目录。
 计网杀我也?代码示例里面的accept函数是:
acceptSocket = accept(ProxyServer, NULL, NULL);
 但我查询相应的accept发现,根本不能写null,函数原型。

1
2
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

sockfd 调用socket函数返回的套接字
addr将对端的套接字地址结构的信息保存在其中
addrlen是套接字地址结构的大小
当然, 如果不关心对端的信息, 可以将addr和addrlen都置为NULL.

CATALOG
  1. 1. 自然语言处理
    1. 1.1. tensorflow相关
    2. 1.2. tensorflow-gpu
    3. 1.3. tensor-flow代码升级
  2. 2. 计网笔记
    1. 2.1. lab1
      1. 2.1.1. StartProxy Exception
      2. 2.1.2. 代理服务器无响应???
      3. 2.1.3. _beginthread()和_beginthreadex
      4. 2.1.4. goto 跳过了***的初始化操作
      5. 2.1.5. “无法查找或打开PDB文件”